I am just encountering the same class of issue. My first approach was to maintain lists of references. An array of IDs and use the IN operator in a where constraints. You quickly come up against the issue that firestore only permits an array size of 10 when you want to recover documents having an id in your reference list.
As a workaround I am considering using splitting my list across n sublists and using seperate queries and using some rxjs to merge the results.
I thought about denromalisation but the overhead of maintenance makes it a non starter with only a small amount of data volatility.
I suspect like many others I have been seduced by the snapshot reactivity and the free tier. The querying model is extremely limiting