Yes, that is a crucial bit of information.
Now, if you restructure your database to be how Laserlight suggested, the above query would work 😉 In all seriousness, you should think about the structure of your database. Right now you kind of have it working against you in the sense that you're crippling it. You can't exactly join tables easily, so you have to run multiple queries and manually join the information. This is perfect stuff for a database to do.
Now, what you could (though I suggest not) do is to use the LOCATE() function inside a SUBSTRING() function....
$query = "SELECT n.products_id, n.products_name, s.products_date_available
FROM " . TABLE_NOTIFICATIONS . " AS n
LEFT JOIN " . TABLE_SHIPMENTS . " AS s
ON n.products_name = SUBSTRING(s.products_name FROM 0 FOR LOCATE('#', s.products_name))
WHERE n.customer_id='" . (int) $customer_id . "'
ORDER BY s.products_name ASC";