All it takes for transaction fees to go down to ~zero is a benevolent or a malevolent miner occasionally accepting 0 fee transactions.
One miner accepts 0 fee transactions. Why would the other follow their example?
If "enough" (1 large or many small) miners are willing to fill 20 MB blocks of ~0 fee transactions, then some bitcoin users will send ~0 fee transactions, and some miners that mine for transaction fees will stop mining, which weakens the security of the bitcoin network.
This is dumb. Let us say one miner starts filling 20MB blocks with 0-fee transactions. Let's say that there are users out there who supply her with 0-fee transactions. Miners who are mining for fees will just ignore the 0-fee transactions, which means people who do 0-fee transactions just have to wait until the one miner who accepts them happens to get a block.
That means that the user has a choice between an 0-fee transaction that may or may not eventually get onto the blockchain at some unknown time in the distant future, or a fees-paid transaction that will get into the next block. So, fees-paid transactions will keep happening because people don't want the uncertainty, delay, and hassle of wondering whether and when their tx will go through.
But it gets better. That miner who is filling giant blocks with 0-fee transactions? She's competing with miners who are collecting fees. In that competition she will go broke. So to the extent a miner can cause a problem by the behavior you describe, it's a self-correcting problem.