For starters, I'd look into alternatives like EdgeCast, Akamai (both very affordable via resellers) or fastly. Cloudfront has lots of random issues which you can read about on the AWS forums and stackoverflow. To say the least: response time with Cloudfront compared to other CDNs is subpar.

Using a CNAME — I'd also not do this. It's only cosmetics. It'll bite you as soon as you need SSL which is either not possible with Cloudfront (issues with the browser since the certificate won't work) or will be very expensive to setup since you'll have to get your CDN provider to announce/distribute your SSL certificate. In addition, just by using a CNAME you'll introduce more potential breakage and issues into the stack for little benefit.

Another thing to take into account is to introduce versioning with a CDN so you don't have to constantly run an invalidation — e.g. you change style.css but the change won't be picked up before the cache runs out. This may or may not impact your website. You can always manually invalidate but it's easier to have something like style-x.y.z.css so you don't have to do it. This is probably the biggest gotcha for people who are new to caching and CDNs. ;)

So yeah, on using S3 — viable alternative, but I found that using a transparent proxy still yields the best results and doesn't require additional steps in the build an deployment process.

@Andre: A reliable way to test CDNs is something like pingdom. Run pingdom against a couple URLs (e.g. jquery hosted on various CDNs) for a few weeks and compare by origin location which is most interesting for you. Done this before on my own blog but I haven't updated in a while (I hope a link is alright in this case):