i bought my .co.uk domain with 123, but bought .com and my hosting with godaddy.
for .com and hosting godaddy have a great price. If you choose hosting first, they offer you a .com domain for $1 I think (or very cheap anyway) Then use the code LINUX20 you'll get 20% off the price of hosting, which isn't that much anyway, maybe £50 ish for the year.
With that hosting you get email addresses for free too, but you can just nominate 1 address as a 'catchall' - so
anything@yourdomain.com will go to your email.
I have no affiliation with either company. I have only used 123 for registering .co.uk domains then pointed the name servers to the godaddy hosting