Welcome to Magento.StackExchange!
Unfortunately, there is no out-of-box module that will do this for you.
I'd highly encourage you to reconsider this as an option. Your users are not stupid (no matter how stupidly they behave) - many, many years of eCommerce analysis has shown me that, nearly 80% of the time, users reaching a 404 will hit the on-site-search bar within seconds. Put your effort into fixing up your site search with better categorization (read: keyword stuffing).
Google indexes aren't forever. If you're afraid of 404s, consider sprucing up your 404 page itself. Increase your conversion potential by offering a 5-10% discount coupon to those inconvenienced by hitting a 404. Or, better yet, don't disable product pages. Rather, disable the ability to purchase (e.g. set as out of stock) and provide a static block / link that links to the relevant page/category.
I don't care, just give me codes because internets:
At it's simplest coding a module with an observer that will handle this for you is trivial:
Event designation in config.xml:
<global>
<events>
<controller_action_postdispatch_catalog_product_view>
<observers>
<yourmodule_capcpv>
<class>YourCompany_YourModule_Model_Observer</class>
<method>catalogProductViewPostdispatch</method>
</yourmodule_capcpv>
</observers>
</controller_action_postdispatch_catalog_product_view>
</events>
</global>
app/code/local/YourCompany/YourModule/Model/Observer.php:
<?php
class YourCompany_YourModule_Model_Observer
{
public function catalogProductViewPostdispatch($observer)
{
$controller = $observer->getEvent()->getControllerAction();
$product = Mage::registry('current_product');
if($product->getStatus()!=Mage_Catalog_Model_Product_Status::STATUS_ENABLED){
$action->getResponse()->setRedirect(/* your redirect URL here with Mage::getUrl() */);
}
}
}