You've got the basic idea.
- Inventory your assets, and also identify the pages which receive the most traffic and backlinks (don't forget alternate URLs if the same page is accessible via more than one URL).
- Identify any content that isn't being directly migrated to the new site; find a corresponding asset on the new site if there is one*; if there isn't, and this is a high traffic URL, then perhaps you should create one; otherwise, mark the URL to be dealt with in step 5.
- Create a translation table in a CSV spreadsheet mapping old URLs to new ones for all assets (don't forget any media files that users may have embedded in their own site, e.g. buttons/badges/banners/videos/newsfeeds/search tools*).
- Use .htaccess or whatever method you prefer to make the 301 redirects based on the translation table.
- Create a helpful 404 page to be displayed when users request an old URL with no corresponding content on the new site. It should explain the site migration and suggest alternative resources for finding the information they need. E.g. perform an automatic search to list similar pages, offer another site that might have the information, or provide contact info through which they can request the info. It's also a good idea to provide a feedback form or email address through which users can report errors.
- After the new site is launched, monitor 404 errors and support emails to make sure everything is going as planned.
What's important is that you don't lose the customer's trust by creating a bunch of dead links/bookmarks/images/feeds/video embeds and making information hard to find. Do everything you can to make the transition seamless, especially if there are lots of people who rely on the information on your site.
If the old site had a search plugin, rewrite the old search requests automatically or offer a new OpenSearch plugin. Oracle did a poor job of this when they recently updated their network and broke all search plugins for the MySQL online documentation. So developers used to being able to effortlessly look up MySQL commands for the past 7-8 years suddenly find their search plugins worthless, and even the on-site search function doesn't work.
Lastly, don't make inappropriate 301 redirects. If there's a new version of a page with updated content, then, sure, redirect. But if there isn't a corresponding page to redirect to, don't just redirect to the homepage or some other random page that doesn't have the content the user expects. Consider the user's intent and whether they'll be surprised at the page they land on. Even if there's another article on the same general topic, it's not necessarily appropriate to use a 301 redirect if the content is completely different. In those cases, it's better to present a 404 page to let the user know the content they're looking for no longer exists, and suggest an alternate page (or pages) that they might be interested in.