If indexing the columns isn't possible and you cannot change the database structure (which is the right thing to do from a database perspective) then I see a few of options
Select Distinct
You are just going to bite the bullet and run this every.time.but it isn't ideal if the values rarely change.
The results will be cached on the database so you will get some minimal efficiency.
Select Distinct Everything
Run a single query that gets all the possible combinations of distinct values. You then would need to deduplicate each column but you would only be having a single trip to the database.
This obviously depends on cardinality.
Cache the values on your app
You haven't mentioned what you are using for your webapp but you should be able to use some sort of persistence / caching framework so you load the distinct list of values once and then keep them in memory and update as necessary.
This approach also depends on where updates are taking place. If the database is changing outside of your webapp then this becomes problematic.