In the general case I don't think that majority miner attacks can be defended against without changing the hash algorithm.
Specific cases like "empty blocks" could be addressed via a hard fork.
But there's nothing stopping miners from faking transactions in blocks, sending amounts to themselves, filling the block with OP_RETURNs, or just doing the minimum possible to get around your "fix".
PoW absolutely relies on >50% of miners being honest, always has done.