Two years ago while working at Sea Grant, Dan and I were creating the new mdsg site. Sea Grant had hundreds of pages of existing content in static html. The main concern was that many in the community had bookmarked alot of the content and when we launched the new site, those bookmarks would generate 404's (a very unhelpful content dead end).
Since we were porting the exact same content into a database served by a PHP CMS, we devised a fairly elegant (by "elegant", I mean simple) solution.
At launch time, we moved the old site to a hidden URL as a reference. This was so the script that we'd create could reference the old site, parse the title, search the current db of titles and return a list of suggested pages they were looking for. When a person chose the correct page, it would map that choice to the requested url and learn what page went where. The next time a person hit that link, the error page would forward them to the mapped page.
Of course, we knew that this kind of relied on the person choosing the correct link in the first place, but it was close enough for government work (being an educational institution) and the site had a search feature to help them should they be lead astray.