Если вам логически необходимо условие ИЛИ, тогда это то, что вам нужно. Нет ничего плохого в использовании OR. Если оба столбца проиндексированы, то запрос, вероятно, займет больше времени, чем выполнение этих двух запросов независимо друг от друга:
select * from tabA
where a in (a,b,c);
select * from tabA
where b in (a,b,c);
Оптимизатор вполне может сделать это и объединить результаты следующим образом:
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=4 Card=2 Bytes=256)
1 0 CONCATENATION
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'TABA' (Cost=2 Card=1 Bytes=128)
3 2 INDEX (RANGE SCAN) OF 'TABA_A_IDX' (NON-UNIQUE) (Cost=1 Card=1)
4 1 TABLE ACCESS (BY INDEX ROWID) OF 'TABA' (Cost=2 Card=1 Bytes=128)
5 4 INDEX (UNIQUE SCAN) OF 'TABA_B_IDX' (NON-UNIQUE) (Cost=1 Card=1)