If you really think that level of normalization is necessary for headers, go for it. I think you've found a bike shed and have decided to paint it. I won't stop you of course, but I'll wish you were doing something more important.. :-) Correct database design would be an array/custom type IMO ;-) Not all DBs support array/custom types though :-)
For M1, I don't think the actual entity structure is that important. Basic features, performance, security and overall correctness are what we'll be judged on.
As for the locking stuff blow, I don't think any of that is very applicable here. Also note that entity-based mailboxes is just one option we should support.
As for the JBoss Cache, I'm still familiarizing myself with it. I'm not entirely sure how useful it will be for this because most of the stuff we need persisted.
I'd certainly enjoy it if someone implemented a Hibernate-based store. I don't think it should be done before M1 though.
As for CMP caching/cache invalidation. It will depend on your mail server situation. For a simple mail server you could use option-A entities and it would be fine... Eventually we'll need a "Mail Load Balancer" of sorts (if no such thing exists). It will point you round robin with IP-stickiness to a mail server. You can't be guaranteed that you'll ALWAYS hit the same physical mail server. Caching will probably be easier than HTTP because STMP is stateful. Meaning you'll be using one server for an entire interaction and one connection. Secondly, updates are not possible. Its Read, Write and Delete only. Next, a shared mail account should not be a normal case. Meaning if I open two mail clients and try and read my mail via both...well I'm weird. If someone sends me mail while I'm reading it and I don't get it until next time I hit receive, its not catastrophic.
Thus I think we can probably use option A with cache invalidation in most places. Obviously this is quite configurable and if someone doesn't like it then edit an Entity XML descriptor and away you go.
Or at least thats my thinking this morning. Personally I'd like to see us tackle:
1. Error reporting (bounces)
2. Proper addition of headers (right now we don't add the normal stuff)
4. Unit tests (including the script runner)
before we tackle issues of this detail. Again just my personal preference based on what I see as being critical for the release. I assume we'll be changing this area somewhat dramatically once we plug in other persistence and handle the differences in mail box handling between IMAP and POP.