I'm not familiar with Dovecot but I am quite familiar with both Courier and Cyrus. I built a courier system from source and maintained it for years before dumping it in favor of Cyrus.
Cyrus is a bare to learn. The documentation is crazy complicated and terse. However, I've found Cyrus to be really awesome once you figure things out.
Cyrus has a squatter service that does full text indexing on the mailbox store. You want the indexing done on the mailbox store for a couple reasons:
If you have a webmail app, like squirrelmail, you can enable server side look-ups which, in turn, will cause Cyrus to use it's squatter database.
Indexing on the client can be problematic if your index get out of sync between multiple clients.
Another plug for Cyrus: We have over 5,000 IMAP/POP3 customers; we host a lot of customer email; one of our customers is a local cable TV company. We use a setup very similar to CMU's with IMAP proxies running on same web servers that handle webmail. The mail stores are distributed among 5 backend servers. We have 4 IMAP proxies. Although 4 is over kill, we get away with it because we have two physically distant data centers and local HA (High Availability) is required for us plus the IMAP proxies are pulling double duty and running Apache+PHP+mod_perl for the webmail aspects.
Finally, Cyrus has sieve and excellent extensibility via Perl modules... All this allowing some very cool SPAM & Virus filtering and SpamAssassin learning....
Take a hard look at Cyrus, I promise you'll grow to love it. A good book is "The Book of IMAP" and it covers many aspects of Cyrus...