Кажется, такой вариант вполне может подойти. Нужно понимать, что храниться такая конструкция будет следующим образом:
Будет создано 2 файла, в одном их них будет храниться количество элементов массива для строки (uint64_t), во втором будут храниться сами значения.
Файл с количеством элементов должен сжаться очень хорошо т.к. уникальных значений будет совсем мало. Файл с данными должен сжаться несколько хуже, но скорее всего лучше, чем битова маска (UInt64). При доступе к массиву системе придется читать и разжимать оба файла. Так же несколько усложнится сама процедура выборки: в секции WHERE должно быть что-то типа arrayAll(x -> x IN (3, 4, 5), array_column).
Из безусловных плюсов: можно хранить битовые маски произвольной длинны.
Пробуйте, будет интересно узнать результаты.