IIUC, you're storing every column. My example doesn't do that - it only stores columns that have something in them. It needs three bytes for each NON-EMPTY column. So a map with nothing on it would use 0 bytes, one with one column somewhere on it but otherwise empty would use 3 bytes (the x and y coordinates plus the value you store now), etc.
The amount of storage varies depending on how empty the map is, which is common for such techniques. This example breaks even at ⅔rds empty, but there are lots of alternatives that take advantage of structure in the data. For instance, you could encode a "wall" with an x, y, a byte indicating length/direction, and then length bytes of column info. So a wall across the middle would be 131 bytes TOTAL storage, not the 384 my first example used. You could use RLE inside of a wall.
I haven't looked at this stuff in thirtyfive years, so not only have I forgotten a lot, but there's almost certainly been interesting work in the interim (in particular, the recent rise in popularity of functional languages has led to a a lot of research on immutable structures which would let you store them in flash). So you really need to read up on sparse matrices (say https://en.wikipedia.org/wiki/Sparse_matrix). If you're still confused about why this might be a win, that wiki page would also help.