I usually have good luck googling the yarn I want and then shop around by price. If I want it quickly I try to find a LYS (but not local enough that I want to drive to) with a site. That way it usually only takes a day for shipping since they are so close, but you don't have to pay the expedited cost.
I know a lot of people like WEBS. I've used Yarn Market a couple times. They have a huge selection and I haven't had problems.