Most people that run geth, run geth in fast mode including us at SKALE. Our validators also run geth in fast mode.
It is pretty hard to run a full node. We tried it a couple of times, and never were able to fully sync, so we ended up abandoning the idea. I think very few people do it, and as a result user experience is unfriendly. The same can be said about light client mode by the way, we tried it a couple of times and never could make it work.
We are researching using calldata in the near future (within the next couple of months), especially once SLOAD becomes more expensive. In our case submitting pieces of the state to the smart contract in calldata may lower gas costs as compared to storing the state in EVM.
The problem is, if we do it, every validator needs to run a full node, and, as I described above, this may cause lots of pain.
I think the best way to solve this problem is to introduce a “fast+” switch to geth that does the fast mode, plus downloads all transactions that were ever sent to a particular destination address.