However, there is one problem with your idea: what do you choose to filter? And with a filter, how do things not in the filter get transmitted through the network to the miners? How do you guarantee that someone will relay your transaction? The flood protocol practically guarantees this. But having everyone filter out transactions to relay would result in a lot of transactions being missed and thus not relayed.
Thanks for the feedback!
Yeah, this was originally inspired by BIP 37. The real question here is what we need to add so that BIP 37 is applicable for full nodes on both ends (in terms of being robust to Eclipse and other attacks).
As for the second part, I think I need to provide more explanation.
For example, full node N joins the network (and connects to existing A1-A8 nodes), and it obviously wants to get all the transactions. However, there is no real reason to get 8 inv messages (worst case). So, this node sends a request to A1-A8 so that they filter transactions being sent to the node N. Thus,
A1 sends to N all the transaction invs within a range 0x0-0x2
A2 sends to N all the transaction invs within a range 0x2-0x4
...
A8 sends to N all the transaction invs within a range 0xD-0xF
so that node N sooner or later gets all the transactions.
This is very simplified version, and is vulnerable to some obvious attacks. I mentioned some ideas to make it more robust in the original post.
If you are concerned about the very first hop — it is a very good point, even though most of the nodes rely somebody's transactions most of the time. I need to think more about first hop strategy.