Kind of OT for this post but I think it would be good if someone could build the what would have to be a lot of bloat and complexity into core and the protocol that would allow a 2nd mempool so to speak that only has 0 fee tx in it.
Mempool isn't part of protocol. Your full node software decide how much, how long and which transaction stay on the mempool.
No problem, just run your node with those settings:
minrelaytxfee=0.00000000
blockmintxfee=0.00000000
dustrelayfee=0.00000000
It will still be protected from spam, because getblocktemplate and similar commands always put transactions from the highest to the lowest fee, so with those settings, free transactions will be included only if there is a room for them.
But on practice, it's unlikely you'll receive any transaction with fee lower than 1 sat/vB. Decent amount of node need to use same configuration as yours or Bitcoin Core change default value of those key to 0 to make 0-fee TX more practical.