Possible answers to 1,2,3...
Sounds like you need to do a bit of tuning on your caches. Sitecore has a number of "admin" pages which help you diagnose problems such as this - you can use the cache admin page to monitor the current size, configured size and vectors of the individual caches, include prefetch. To access this page, browse to http:///sitecore/admin/cache.aspx
From my personal experience, you need to ensure that all caches have plenty of breathing room. If a particular cache runs at ~40mb once your site is up and running, then it is advisable to have a cache size of >60mb. If your caches do not have this breathing space, you will find that they will dump data
If you are using the HTML output cache, there is also the /sitecore/admin/stats.aspx page which will help you determine how well controls are performing.
Please see this blog for more information about Cache Tuning
Answer to number 4...
The prefetch cache is built at application start and maintained for the life of the application pool. Providing each CD has the same prefetch configuration, and cache size configuration, the caches will be identical, so performance differences between them should be non-existent or negligible.