pow is good enough, it need maybe a better transaction validate, a system that can check if a block is valid, without basing its check on the longest chain
The current implementation of PoW already does this. When there are competing blockchains, the one the network accepts as "valid" is the one that has done the most work, although this often happens to be the longest chain, it also prevents people from attacking the network by starting to mine on a blockchain when the network is significantly less then it is now and then building up the blockchain until the block height is the same as it is now