Instead of redirecting both groups of URLs to the same script, why not just send them to two different scripts?
Just:
RewriteCond ${REQUEST_URI} !-f RewriteRule ^\w+/\d+-[\w-]+$ /content.cfm/$0 [L] RewriteCond ${REQUEST_URI} !-f RewriteRule ^.* /redirect.cfm/$0 [L,QSA]
Then redirect.cfm can search for the replacement URL and redirect 301, while content.cfm just serves the content.
(You did not specify how your CF is configured, you may need to update the Jrun / Tomcat / other configuration to support /content.cfm/* and /redirect.cfm/* - this will be done in the same way as for index.cfm)
For performance reasons, you still want to avoid getting into the database for redirection if you can, and you can do this by creating rewrite rules for each page that performs 301 redirects on the Apache side. It can be as simple as adding a line to the .htaccess file, for example:
<cfset NewLine = 'RewriteRule #ReEscape(OldUrl)# #NewUrl# [L,QSA,R=301]' /> <cffile action="append" file="./.htaccess" output=#NewLine# />
(where OldUrl and NewUrl were scanned from the database.)
You can also research using mod_alias redirect instead of mod_rewrite RewriteRule, where the syntax is Redirect permanent #OldUrl# #NewUrl# - since OldUrl is the exact path it matches, it will probably be faster.
Please note that these rules must be checked before the redirect.cfm is redirected - if they are in the same .htaccess, you cannot just add append, but if they are in the general Apache configuration files then first .htaccess rules will be checked.
Also, according to Sharon's comment, you should check if your Apache will handle 50k rules while I saw that it said that โthousandsโ of Apache rewritable rewritable regex works fine, there might be some limit (or at least you need to split into several files).