1) Fast looking up messages sent/received by a particular email address, time, tag, priority, and a handful other properties
and
2) Appending thousands of new messages per second at peak?
1) Fast looking up messages sent/received by a particular email address, time, tag, priority, and a handful other properties
and
2) Appending thousands of new messages per second at peak?
If not for the continuous addition of messages, I'd suggest notmuch (http://notmuchmail.org/), which does a great job of indexing in any way you could want. Unfortunately, as far as I know notmuch does not have an "online" indexing mechanism; someone wrote a notmuch-deliver that adds a message and indexes it, but I doubt it would meet your performance requirements. You could probably make notmuch do what you want, but you might want a new indexing mechanism instead.
I still think you want something very similar to Maildir underneath though.
As for listing and manipulating, I'd suggest not ever listing all the files. Access them by name only, which should require near-constant time no matter how many files you have. Manipulating the files should take similarly little time. On the occasions that you do need to list all the files, you might find https://www.olark.com/spw/2011/08/you-can-list-a-directory-w... interesting.
A pile of RAM helps, to keep as many directory entries in the dcache as possible.
(Or you could always encrypt each email and throw it at an object storage system similar to S3. ;) )
If there's a better term to describe this I'd be glad to learn it.
The biggest problem is read bandwidth for your disks. Write IO is likely to be constrained by available network bandwidth unless you do something stupid. Read bandwidth constraints for e-mail are generally easily mitigated by creating an index (so you only need to open or stat the message files when opening individual messages, not to, say, list message sizes in a POP3 server or present an index view on a web interface).
If you need to list/manipulate those files other than writing them once and reading them when a user actually opens that specific message, or deleting them when the user actually deletes the message, then you're doing something wrong (e.g. you didn't create a sufficiently flexible index).
[1] http://www.djcbsoftware.nl/code/mu, or 'maildir-utils' in debian/ubuntu
As for (2), I know a lot less about indexing messages than I do about storing them, but I would try out an off the shelf SQL or noSQL system and measure the performance, before trying to build anything fancy.