First let's get over some basics on how to buy a domain name / register a domain name. The name should be short and easy to remember and you should never use more than 3 words. Preferably it should be a COM but other domain extensions ( with good keywords ) can be just as nice. In fact, you should always focus on finding a domain with good solid keywords. Whatever you do don't buy a domain name with a potential trademark risk.
My preferred registrar for cheap domains registrations is Godaddy. When you do a bulk domain registration at Godaddy (6+ domains) they also give a domain registration discount as a bonus.
To buy registered premium domains you can search in the aftermarket: Sedo.com has a huge collection of quality premium domains that you can buy.
A last option to buy a domain name is to catch expired domains. This is basically a registered domain that used to belong to someone but their domain registration expired because they forgot to renew. A recommended site where you can back order domain names is SnapNames. They have a database that keeps track of the expired domain lists and which you can use to do an expired domain names search. Don’t believe you can snatch a good domain yourself once it drops because there are crazy systems that monitor and find these domain names.
Here are some other Top Sites which are really valuable in finding the perfect domain name:
StatBrain.com: StatBrain is a free domain research tool. You can find out how many visits any domain name has. Statbrain estimates the number of visits based on offsite factors like backlinks, Alexa Rank etc.
NameBio.com: Here you will find the latest domain sales which you can use as a reference to calculate the potential value of your domain name. It's usage its free.
Estibot.com: Amazing Free Domain Research and Appraisal tools. Highly recommended site if you're serious about making money with domaining!
Namestation.com: Free domain suggestion tool for finding unique name ideas which you can use to buy domains.