Bitcoin (and other coin) mining seems very inefficient
So how about a system where each pools/miners broadcasts the work they are currently doing, so that other miners know not to start working on those blocks? 


There is no need for that; there is never any duplicated work. Since every block has at least the pool's/miner's payout address, which is:


hashed into the coinbase txid,
hashed through the Merkle tree,
hashed into the Merkle root,
hashed into the block header


all pools are always searching non-overlapping sets of block candidates already.