I've used some of the above space by adding a non-witness size (for blocks) to the txs table. This is 32 bits per block and sits next to the witness size. This matches the pair of values in the tx table. That allows us to produce virtual byte size for blocks and txs at almost no cost, which optimizes for fee computation. The two sizes in the txs table could be compressed using variable sized integer, which would cut the storage way down. Also we can compress the is_coinbase bit in the tx table into one of the sizes, which would eliminate 1byte per tx, or around 1GB total.