IF the Categories that actually hold the Products use those Categories as their master_categories_id then you could customize the
/includes/modules/shipping/usps.php

with something like:
Code:
          $cost = preg_replace('/[^0-9.]/', '',  $cost);


// bof: do not show MEDIA MAIL for master_categories_id 10, 12 and 22
$chk_nonmedia_cat = 0;
$chk_nonmedia_cat += $_SESSION['cart']->in_cart_check('master_categories_id', '10');
$chk_nonmedia_cat += $_SESSION['cart']->in_cart_check('master_categories_id', '12');
$chk_nonmedia_cat += $_SESSION['cart']->in_cart_check('master_categories_id', '22');

if ($type == 'MEDIA' && $chk_nonmedia_cat > 0) {
  $skip_it = true;
} else {
  $skip_it = false;
}

if (!$skip_it) {
          $methods[] = array('id' => $type,
                             'title' => $title,
                             'cost' => ($cost * $shipping_num_boxes) + (MODULE_SHIPPING_USPS_HANDLING_METHOD == 'Box' ? MODULE_SHIPPING_USPS_HANDLING * $shipping_num_boxes : MODULE_SHIPPING_USPS_HANDLING) );
}
// eof: do not show MEDIA MAIL for master_categories_id 10, 12 and 22

        }

        $this->quotes['methods'] = $methods;
where you can use the code:
Code:
$chk_nonmedia_cat += $_SESSION['cart']->in_cart_check('master_categories_id', '10');
for each of the Categories with the NON-Media Mail Products ...