Trying to reduce number of table scans when querying on the same column but different values
The join to 'Products' in both your sub queries is redundant and can be removed. You can filter directly on "Where od.ProductCode = 'S18_1589'" There is a FK between Products and OrderDetails, so there can't be a ProductCode that is not in Products.
The general challenge you are trying to solve is called 'Relational Division'. Your query will work for only 2 products, but what about 3, 10, or 30?? Search the forum here and you will find many excellent discussions on it. For your case, I would use the following solution. It relies on rephrasing the question in double negative form - "Show me all customers, for which there isn't a single ProductCode from our ProductsList, which is not in the customer's order items"



WITH prodctsList
AS
(
SELECT *
FROM   (VALUES ('S24_1628'), ('S18_1589')) AS products(productCode)
/* Add as many products as needed */
)
SELECT customerNumber
FROM   customers AS C
WHERE NOT EXISTS (
                  SELECT productCode
                  FROM   productList
                  EXCEPT
                  SELECT productCode
                  FROM   orders AS O
                         INNER JOIN
                         orderDetails AS OD
                         ON O.orderNumber = OD.orderNumber
                  WHERE  O.customerNumber = C.customerNumber
);



A solution without EXISTS and VALUES table constructor


WITH prodctsList
AS
(
    SELECT 'S24_1628' AS productCode
    UNION ALL
    SELECT 'S18_1589'
/* Add as many products as needed */
)
SELECT O.customerNumber
FROM   orders AS O
       INNER JOIN
       orderDetails AS OD
       ON O.orderNumber = OD.orderNumber
       INNER JOIN
       productList AS PL
       ON PL.productCode = OD.productCode
GROUP BY O.customerNumber
HAVING COUNT(*) = (SELECT COUNT(*) FROM productsList);