Here’s the best solution to this, which might help other customers:
When a query has many ORed predicates ANDed with several other predicates, the Request Qualification Area (RQA) that is passed to the Compoun Boolean Selection Facility (CBS) becomes large because every ANDed predicate is duplicated for each OR predicate. This is necessary to provide independent paths for selecting the best index to use.
If the size is higher than the RQA limit, then the predicates are not passed to CBS. If the predicates can restrict the traversal index scan range (into a range for each OR value), that is much more efficient than scanning the entire table.
You can create smaller RQAs within the size limit, by dividing the ORs into multiple subselects using UNION ALL. The RQA for each subselect will be smaller, and the UNION ALL doesn't cause a sort to eliminate possible duplicate rows, as using just UNION does. Sorting the ORed values might eliminate the need for an ORDER BY sort.
Example:
SELECT * FROM T1 WHERE A = 1 AND B = 2 AND (C = 1 OR C = 2 OR … C = 98 OR C = 99);
Convert to:
SELECT * FROM T1 WHERE A = 1 AND B = 2 AND (C = 1 OR C = 2 OR … C = 49 OR C = 50)
UNION ALL
SELECT * FROM T1 WHERE A = 1 AND B = 2 AND (C = 51 OR C = 52 OR … C = 98 OR C = 99);