Where is the best place for cache bins (Drupal 7)?
First, cache tables is a term specific for a relational database, the generic term is cache bin or simply cache.

This is quite a big question but I can try to give you some hints...

Memcache

The memcached backend for Drupal 7 was rather buggy until very recently, but a lot of issues were fixed recently (some by me, more by catch) and it should work fine now. Memcache allows to have multiple cache servers, it is very fast.

MongoDB

I can't say much about this, haven't used it as a cache backend. Not as fast as Memcached, but might get interesting in the feature, as it will provide native support for the upcoming cache tag API (which will only be part of Drupal 8).

APC

Probably the fastest solution because the cache is read directly from memory within the same process. However, I've had stability issues in the past when using this as the cache, it doesn't allow to store that much data (as it blows up the apache processes memory-wise) and it gets problematic once you have multiple web servers (because you can't clear the cache on the other servers).

Filecache

Slower than Memcache/APC but allows to store large amounts of data. I'd look into it if your caches start to get too big for memcache.

My recommendation: Memcache

Note that some cache tables (cache_update) can't be moved out of the database, because they're not a real cache and use separate API functions and some others should be kept there too (cache_form: again not a real cache, must not be cleared as it contains information about built forms including their data)