Hey, I've noticed that mutt only caches message headers and bodies after it has had to download the header/body once before. For example, the first time you open a large imap folder it'll take a long time while mutt downloads all of the headers. The next times it will be faster. The first time you search the bodies of emails in a large imap folder it'll take an extremely long time as mutt downloads the bodies (including attachments) of all messages in the folder. The next times it will be much faster.
So if you open every imap folder in your imap account and search for `~b foobar` then things will be much faster for you later, when you're trying to open and search folders because you actually need something. But you'd have to repeat this manual process periodically as new, not-yet-cached mails are added to the folders. I wonder if it's possible to write a script that would get mutt to open every folder in an imap account and download all of the message bodies and headers into its cache? You could run it from cron to keep your mutt working reasonably fast.