I usually get my grains from a local maltster, but when I need to buy online I use somewhere I can order by the ounce (Great Fermentations, as mentioned, plus Atlantic Brew Supply, and BrewHardware) or that has a lot of variety (MoreBeer or Midwest Supply.)
Hops from Yakima Valley Hops (great packaging, 2 oz vacuum packed is barely more expensive per pound than larger packages), unless it's a variety I can't get there, in which case MoreBeer probably has it. And when they don't have it either (rare), I'll order from just about anywhere to get weird varietals (Lubelski, Phoenix, Bergamot, Grungeist) -- "I've never heard of them, but they have an online ordering system, what could go wrong?"
Dry yeast from RiteBrew in quantities of 10 for the discount (on what's already the lowest price around.) Liquid yeast from any of the above, usually along with my grain/hop order.