Mike,
Have you considered instead of flushing the tables, instead setting up hot and warm caches, and then manually setting the key_cache_size for that cache to zero, then resetting to a larger number. I haven't done the benchmarking, but imagine that this technique would be faster than a full table flush.
If you provide a little more information about your tables, including how often each is queried, how many rows and what key types are, how fresh or stale the key information becomes after X length of time, etc, then I can suggest possibilties for using unique key caches for the different tables, and/or separating some tables out from your main ones to enable a cold cache for less frequently used blocks.
This way, you could set up a hot cache for the most active data tables, allocating 60-70% of your total key_cache RAM to this cache, a warm cache for the semi-active stuff at 20% of the RAM, and a cold cache of 10% of the RAM, which you could assign tables which rarely get hit.
Until MySQL builds more control over diret flushing of certain blocks tied to a segment or entire table, this might be the best solution to your problems, because it will allow you to prevent the main key_cache from using cache space for index blocks that are rarely used...
Sorry for babbling on...it's been a long day...
Cheers,
Jay Pipes
Community Relations Manager, North America, MySQL Inc.
Got Cluster?
http://www.mysql.com/cluster
Personal:
http://jpipes.com