I agree with your idea and try to implement it and will soon attach a patch with a solution.
Additionally, if those OR constants repeat you'll see ...
If all constants are the same value, fine
explain select * from x where ((ID = 1) OR (ID = 1) OR (ID = 1));
Index Only Scan using x_id on x (cost=0.42..4.44 rows=1 width=4) Index Cond: (id = 1)
if all values are almost the same, ops
explain select * from x where ((ID = 1) OR (ID = 1) OR (ID = 1) OR (ID = 2));
Bitmap Heap Scan on x (cost=17.73..33.45 rows=4 width=4) Recheck Cond: ((id = 1) OR (id = 1) OR (id = 1) OR (id = 2)) -> BitmapOr (cost=17.73..17.73 rows=4 width=0) -> Bitmap Index Scan on x_id (cost=0.00..4.43 rows=1 width=0) Index Cond: (id = 1) -> Bitmap Index Scan on x_id (cost=0.00..4.43 rows=1 width=0) Index Cond: (id = 1) -> Bitmap Index Scan on x_id (cost=0.00..4.43 rows=1 width=0) Index Cond: (id = 1) -> Bitmap Index Scan on x_id (cost=0.00..4.43 rows=1 width=0) Index Cond: (id = 2)