could someone create millions of transactions with no fees, to congest the mempool and slow down the network?
Most nodes will discard and not relay any transactions with a fee less than their configured minimum relay transaction fee.
As https://en.bitcoin.it/wiki/Miner_fees says
The reference implementation’s rules for relaying transactions across the peer-to-peer network are very similar to the rules for sending transactions, as a value of 0.00001 BTC is used to determine whether or not a transaction is considered “Free”. However, the rule that all outputs must be 0.01 BTC or larger does not apply. To prevent “penny-flooding” denial-of-service attacks on the network, the reference implementation caps the number of free transactions it will relay to other nodes to (by default) 15 thousand bytes per minute.
Setting Default Value (units) txconfirmtarget 2 (blocks) paytxfee 0 (BTC/kB) mintxfee 0.00001 (BTC/kB) limitfreerelay 15 (thousand bytes per minute) minrelaytxfee 0.00001 (BTC/kB) blockmaxsize 750000 (bytes) blockminsize 0 (bytes) blockprioritysize 0 (bytes)
So there already are countermeasures to denial of service attacks .
None of this has anything to do with mining rewards. I don’t doubt miners will also ruthlessly prune any transactions that don’t serve to maximise their profits.