Мне нужен свой тип данных, размер которого будет очень мал - 4 бит. Как это реализовать? Нужно это для более компактного хранения в памяти и на HDD чисел от 0 до 31. Использовать, например, Byte, чтобы в его двоичном коде хранить 2 моих переменных не вариант, т.к. мне нужны массивы с 4ех байтным типом данных
Для хранения чисел от 0 до 31 вам нужно 5 бит. Хранить можно в BitArray (но по факту, будет выделено все равно 1 байт):
BitArray thirtyOne = new BitArray(new[] { true, true, true, true, true}); //число 31
Увы, вы не сможете создать тип, который будет занимать меньше 1 байта.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей