Discussion posts and replies are publicly visible
This sounds very similar to the concept of a database JOIN i.e. taking data from two different tables, joining them on some correlating data and then filtering out the results. So, as you would when looking at poor performing database queries, consider how that data is being filtered first, apply the filter(s) that return the LEAST amount of data you can in one set and then correlate/join the data to the other dataset.
You could host the joined data in a CDT, one designed to hold the resulting merged data from the a!queryprocessAnalytics() and the a!queryEntity() and then it's juts a case of iterating through that to display in the SAIL interface in the appropriate manner.