Довольно просто
create index my_table_index_index on my_schema.my_table using gin (cast(string_to_array(index, ', ') as int[]));
select *
from my_schema.my_table
where string_to_array(index, ', ')::int[] @> ARRAY [1, 2, 3]::int[];
select *
from my_schema.my_table
where cast(string_to_array(index, ', ') as int[]) @> cast(string_to_array(:param, ', ') as int[]);
Второй вариант запроса параметризованный и касты немного переделали чтобы не было проблем с параметрами.
param Должен быть строкой вида '1' или '1, 2, 3';
Кстати переделать на хранение массива можно ровно так же как тут строится индекс.