I buy yarn at two yarn stores, online, and from places like Stitches Midwest & Wisconsin Sheep & Wool Festival.
As far as online I buy from mostly from Webs, Jimmy Beans Wool, Wollmeise, and Paradise Fiber. As far as bare yarn for dyeing I buy from Wool2Dye4. Only once have I had a bad experience from ordering online and it wasn't the shop but the yarn. It was a Madeleine Tosh Lace and the color was completely different from the example on the website. As a result I never buy MadTosh online. Too many times the color is vastly different from the pictures.
Jimmy Beans has a wool watcher special that runs for two hours or until the yarn sells out...which ever comes first. They will also hold your yarn until Friday in case you buy more Wool watcher specials during the week. You can also build up loyalty points to use during future purchases. Shipping is $4.
Paradise Fibers also runs hourly specials, has loyalty points, and offers free shipping usually once a month.
Webs will never ship free but does a nice discount if you purchase over $60/ 20% off and $125/25% off. They have a good selection of yarn and a wicked 2 month sale that starts April 1st.
A good site to use to substitute various yarns is yarnsub.com