If you have enough time it is certainly better to optimize your website yourself because it is cheaper and you can invest the money you save on other things (site design, hosting, new features) but if you don't have enough time it is certainly better to hire a SEO company to do the work for you because SEO requires very much time and patience.
You can find lots of SEO companies on DigitalPoint or other big webmaster forums or search Google for "SEO company", you will get lots of results.
Personally I never hired a SEO company so I can't recommend you any but I would suggest to spend more importance on the service quality rather than on the price.
If you chose to do the optimization yourself feel free to PM me because I have a lot of experience in SEO and I can answer your questions for free.
