Question: Can you have a column display either text or a link based on another column in the report?

The only way I can think of is to change to text to a link with the SQL query using anchor tags.

Is there another way?

Answer: 
Nope. Doing this in an IR is not really possible, because you'd need hidden columns. But setting columns to hidden doesn't output them into html anymore, so not targetable through JS. It'd be possible with the columns shown on the report, but that gets messy fast.

Using classic reports though, it is rather easy (and oddly enough, only found this after answering [this](https://stackoverflow.com/q/8432811/814048)): [See this link](http://tylermuth.wordpress.com/2007/12/01/conditional-column-formatting-in-apex/)
If you want to take it even further, then indeed, output through your select, or use javascript to target hidden columns and use their values to manipulate the value of another column. Classic report only.
I have just described a way to do it [in this blog post](http://tonyandrews.blogspot.co.uk/2016/07/conditional-column-linking-in-apex.html). This uses the normal APEX column link method with some CSS and Javascript to make it conditional. Beware that I only came up with this solution today and it may have issues I'm not yet aware of!