On 1-D int arrays && operator arrayoverlap is the fastest as @LaposhasúAcsa suggested.
so my answer stands only if arrayoverlap is not avaliable or want to work with anything other than one dimensional integer arrays.
Check UNNEST https://www.postgresql.org/docs/current/static/functions-array.html
CREATE TABLE t45407507 (
id SERIAL PRIMARY KEY
,c int[]
);
insert into t45407507 ( c) values
(ARRAY[1,3,5])
, (ARRAY[1,2])
, (ARRAY[3,4,6])
, (ARRAY[2,5]);
select DISTINCT id from
(SELECT id,unnest(c) as c
from t45407507) x
where x.c in (1,2);
Can be shortened with LATERAL join
select DISTINCT id from
t45407507 x,unnest(c) ec
where ec in (1,2);
The comma (,) in the FROM clause is short notation for CROSS JOIN.
LATERAL is assumed automatically for table functions like unnest().
Rewrite WHERE to use ARRAY as parameter
SELECT DISTINCT id FROM
t45407507 x,unnest(c) ec
WHERE ec = ANY(ARRAY[1,2]);