/[A-Z0-9А-Я\s]/
- это 26 + 10 + 33 + 1 = 70 символов. В стандартной ASCII кодировке 255 символов. 255-70 = 185 не используемых значений остается. 70x70 = 4900 вариантов последовательностей из двух символов, что в байт не уместится тоже конечно, но можно поступить хитрее и использовать часть битов одного байта и часть битов другого байта. Например, в UTF8 символ может быть длиной от одного байта до 4 байт (7-21 бит). Кроме того, т.к. исходные данные считаются статическими, то можно оставить только те последовательности, которые встречаются, а так же исключить бессмысленные - например два пробела или два мягких/твердых знака. Это еще немного сократит варианты. В общем, получится что-то типа словаря. Аналогично можно сделать и для трех символов - в общем, битовая эквилибристика и другие хаки.