So you've got 10,000 pages that need to redirect from an old ugly URL to a new pretty one, with a numerical bit that's unchanged and a descriptive bit that's new?
The good news is that your htaccess just got a lot simpler. In the location where you meant to put your 10,000 redirects, there will instead be one line:
RewriteRule ^product /fixup.php [L]
The bad news is that you now have to code fixup.php. It will contain all your number-description pairs, either within the file itself or in an associated database, depending on which form is less likely to make you run screaming into the night. Aside from data, the php file will only contain about three lines:
--look up number
--find corresponding text description
--issue a redirect (301 with "location" blahblah, don't look at me, I don't speak php) to
http://example.com/$word-$number
where $number is the part you've already got, and $word is the text snippet you just looked up.
--if there's anything left over, issue a 404 instead
That's assuming there are 10,000 different descriptions, and/or that there's no predictable relationship between number and text. If there really is a pattern, like
1-999 blue-widgets
1000-1499 red-widgets
1500-9999 furry-purple-widgets
etc.,
then it can still be done in htaccess