What is the best way to host mbtiles?

The best solution for hosting MBTiles depends on the scale. The solution for 10000 tile requests per month can be very different than the best solution for handling tens or hundreds of requests per second, but S3 works pretty well for both.

S3 can be much cheaper than MapBox if your hosting your own data and not using any of their rendering. At large enough scale S3 can start to be expensive, and it can be much cheaper to serve tiles from a VPS.

I upload a lot of tiles to s3, and my current solution is to launch a small or micro ec2 instance in the aws region the bucket is in(usually US-east), copy the MBTiles file to it with scp, then extract the tiles with MBUtil, and upload them with s3cmd. If you do this it can be handy to create an AMI all setup for this purpose, then just launch it when you need it.

Update 9/2017 I've written a utility for uploading tiles from an MBTiles file to s3 in parallel, using 100 threads im able to upload about 500 tiles per second. Script is available on github