主題
題名通り、bit()をサイズ削減目的で使用するのは誤りです。以下に記載があるようにbit()を表現するために最低でも6byte必要です。
レコードサイズ削減の目的であれば素直にsmallintを使用するのがいいでしょう。
A bit string value requires 1 byte for each group of 8 bits, plus 5 or 8 bytes overhead depending on the length of the string (but long values may be compressed or moved out-of-line, as explained in Section 8.3 for character strings).
https://www.postgresql.org/docs/current/datatype-bit.html
試してみる
PostgreSQLでは、データサイズを調査するのに様々な関数が用意されています。
https://www.postgresql.org/docs/current/functions-admin.html#FUNCTIONS-ADMIN-DBSIZE
今回はcolumnのサイズ数が調査可能なpg_column_sizeを使用します。返り値はbyte単位です。
select 'bit(1)', pg_column_size(1::bit(1)) union
select 'bit(2)', pg_column_size(1::bit(2)) union
select 'bit(3)', pg_column_size(1::bit(3)) union
select 'bit(4)', pg_column_size(1::bit(4)) union
select 'bit(8)', pg_column_size(1::bit(8)) union
select 'bool', pg_column_size(true) union
select 'smallint', pg_column_size(1::smallint);
結果

補足データサイズ
PostgreSQLのデータレイアウトは以下に示されています。
https://www.postgresql.jp/document/11/html/storage-page-layout.html
ページヘッダが24バイト、タプルごとにヘッダが24バイトが付与されます。これで大まかなデータサイズを見積もることが可能です。