hmmmm...doesn't sound like indexed primitives would help you too much in this case. Basically all they do is ensure that each vertex in your model is only stored ONCE in the vertex array. Your polygon list is then an array of POINTERS indexing these vertices. This way Direct3D has far less transform and lighting to do than if you just used DrawPrimitive b/c presumably you would be storing each vertex multiple times. A good example is a circle that is created by sweeping multiple triangles around a central point. Using DrawPrimitive, the central vertex would appear once for each individual triangle. If there are 30 triangles making up the circle, then the central point will be transformed and lit 30 times. If you use DrawIndexedPrimitive, you can just store this central vertex once, and each triangle can maintain an "index" to this point so that directx knows how to draw that triangle. On some models, this makes a HUGE difference(i've seen framerates go from 30 to well over 100 just by changing this).
Unfortunately, it sounds like you're gonna need a LOT of vertices either way using height maps to generate terrain like that. Using DrawIndexedPrimitive may cut down the vertices a bit for you if you're storing them multiple times, but you're still gonna need at least 100x100 like you said if you want a vertex generated from each pixel in the image.
Blue Man