It's a trivial problem to solve even if your strings need to be longer than 23 characters. All you have to do is split it up into a pointer hash grid where each pointer points to a string no longer than 23 characters long. Then using my algorithm that I can't be bothered to explain here you'll access the pointers in a certain order to retrieve the full string. Massive savings.
I like your idea but it has one critical flaw. You forgot that it's a reverse lookup pointer hash grid. And also make sure that everything is done with bits, because there's no reason somebody would need more than 23 bits, either.