1. Only fetch the data you really need. Fetching 5000 rows (except you are in an batch environment) looks like a design problem (esp. in an app). Even Amazon does not show that much
No user is able to scroll through 5000 categories (is it really 5000?). Think about the internet speed. This will take some time and the users will complain about the huge amount of data to download. On each update the user has to load all the data again. Think about memory issues you might get.
2. Build a pager (Scrollview is nice). Load the first 10 or 20 categories (with LIMIT 20) and if the user wants, load the next 20.
3. Show super-categories (like Amazon: Electronics -> TV's -> LED -> 55")
4. When the user clicks on one category, load the first 20 items/events, etc., then the next 20.
5. When the user clicks on an item/event, load the (available) dates, etc. (maybe preload it)
Of course you can do it with a JOIN like this example
SELECT Product.UPC, Product.Name, Price_h.Price, MAX(Price_h.Date)
FROM Product
INNER JOIN Price_h
ON Product.Id = Price_h.Product_id
GROUP BY Product.UPC, Product.Name, Price_h.Price
but this will take me back to #1: Why 5000 rows?