ATI mentioned a neat compression method for their bump maps in one of their papers. Basically they use 16 bits to express the x & y components of a bump map, and the pixel shader figures out the z component with z = +sqrt(x*x+y*y) (z component of a bumpmap is assumed to be positive). This gives you nice high quality bump maps in only 32bits.
Actually NV2X supports this. I'm not sure if this is exposed through D3D though.