I've been thinking about this lately and it's in my project queue to address sometime this year.
I think you have a decent spec outlined, but I think you should consider the archive storage engine. There's a decent article about it here:
http://dev.mysql.com/tech-resources/...ge-engine.html
and you can find the reference manual details here:
http://dev.mysql.com/doc/refman/5.0/...ge-engine.html
At this moment I can't say whether it's a good way to go or not, I need to do more research myself.
Also, I think you should reconsider how you're going to deal with what's archived and what's not. There's really no reason to store ANY data in your live tables about what has been archived. Rather, I think you should simply maintain another domain for your archived data and redirect there. For instance, the logic could go:
Request:
http://forum.example.com/showthread.php?t=77
Process: If thread id 77 exists, show thread. Else, 301 redirect:
Request:
http://archiveforum.example.com/showthread.php?t=77
Process: If thread id 77 exists, show thread. Else, issue 404.
Although there isn't much of a difference resource wise in your live env, at least you don't have to maintain any additional data there. In essence, your live env is autonomous from your archive env, the live env only sends requests to it when it cannot fulfill them.
Anyway, there is some of my humble feedback and I look forward to participating in this discussion moving forward. I won't necessarily get "head down" on this until later this year, but in the mean time I'd love to be involved and help in any way I can and I applaud you for starting a discussion.
Thanks