i think the best solution would be to code something in the core that rejects a block if it has no transactions.
this way the pools that mine empty blocks get NO REWARDS.
Not a bad idea in itself, but they could just create 1 satoshi transactions to put in those blocks. Hence they wouldn't be empty anymore ^^
What's could maybe help, would be to only allow to mine full blocks no?
If only full (or let's say 80% full) blocks were minable, it would make transactions a bit slower but would also answer the size problem for now no?
it's impossible adopt this solution and even is not democratic.
there is a natural solution about a block empty... simply in the long time it will become more difficult find one and not insert some txs and the fee process will help in this process... all miners probably could be more interested in fee txs than block itself (fee > block reward)