That’s trilinear filtering. You can have bilinear anisotropic filtering which only uses the closest mipmap.
Anisotropic filtering takes more samples along the way of the perspective. In the case of a surface which is facing the viewer anisotropic filtering and isotropic filtering will be equvalent.

Use detail textures - small hi-res textures, containing basic material noise, multiplying them on your texture. You can do it with multitexture or multipass easily.
All you need is to tile texture more frequent ( changing texture coords, or just scaling texture matrix - first for static data, second for dynamic meshes ).

more in deep, anisotropic filtering takes into acount the perspective deformation of the polys when they are projected. Then, it mipmaps diferently through the x and y axis. The diference is really big when you have a poly with a shallow angle in the screen. The bad thing about detail textures is that with the multipass approach, you have to render all your geometry twice. Besides, you have to calculate distances for each vertex. Let’s pray for the mighty 1Gb texture memory on 3D accelerators, just to see a Unique Texture Engine