Many post on this matter. Basically, to eliminate the code your steps would be (cheapest to expensive)(when 1st does not work do the next):
1. Install a non-fouler on downstream O2 sensor.
2. Change O2 sensor (use only denso or ntk)
3. Install non-fouler on new O2 sensor
4. Change CAT.
Non-foulers are very effective at making a P0420 go away.
The way I understand it, the engine maintains a balanced mix of fuel and air by trimming the amount of fuel injected to constantly alternate between too rich and too lean as read by the upstream O2 sensor. So if you plot upstream O2 sensor voltage, you'll see it switch between high and low every second or so as the engine relies on this "feedback loop" to keep the mixture correct.
The downstream O2 sensor measures oxygen after the cat. If the cat is doing nothing, you'd expect to see the same shape on the voltage from the downstream sensor. If the cat is working, the downstream sensor should be a flat line. The non-fouler pulls the downstream sensor out of the exhaust stream so that its result looks like a flat line.
This is also why replacing the downstream sensor doesn't typically fix a P0420.