However, I think you can layout the tree so that no pointers point backwards. If so, can you make those offsets smaller by making them relative to the current point in the tree?
Also, since the list only has five-letter words, for the last letter, you don’t even need the letters themselves, just 26 bits for what letters can complete a word. That might be a saving.
Also, the crab source code is available (DEC: http://www.gtoal.com/wordgames/gatekeeper/crab.sh.txt, Mac: http://www.gtoal.com/wordgames/jacobson+appel/mac/Crab_sourc.... Both via http://www.gtoal.com/wordgames/scrabble.html)
Both are nice examples of C the way it is intended to be written, or rather, was intended to be written decades ago.
I don’t remember how that stores the data, but it might do a trick you didn’t think of.
And finally, I just realize that, for fairness, you need to look at (data size + decompressor size). Did you do that?