The *only* way to counteract it is to make it impossible by improving bitcoin privacy at its core.
CoinJoin and joinmarket are cool. Will be interesting when joinmarket is more mature.
But aren't those essentially the same as mixers but decentralized? The fact that you are not relying on a centralized host that can store and handle logs to authorities is a step in the right direction for increased privacy, but ultimately, the problem remains: you could end up with coins that are from criminal origin after the mix.
So I don't see any other way out but to somehow obscure every single address. And I don't think this can be done at this point, it should have been designed like this since day 1.
We would need to hide the actual addresses. With Confidential Transactions, we will be able to hide the amounts, now we need to hide the addresses too, make them some random useless string of characters with no correlation or something. We need something quick.