In all other cases set collation compatibility to True, so indexes on the remote SQL Server tables can be usedleading to a significant performance boost.

I usually set the RPC / RPC Out and Data Access properties to True. When the linked server is a read-only data store I definitely prefer to use an OPENQUERY construction:

select * from openquery
SQLSERVER2,'SELECT col1,col2 FROM CodeCatalog.dbo.recommendations'

over the four part name equivalent:
SELECT col1,col2 FROM SQLSERVER2.CodeCatalog.dbo.recommendations

Far less distributed transaction errors (none so far!) generated by the OLE-DB driver.
Using OPENQUERY requires a bit more code, but it really, really pays of...

Because linked servers are not the fastest objects on the planet, try to access them as less as you can. I'll usually access them just once and dump te result in a temporary table and use that as input for further processing.
[null, null, {"document_url": "http://sqlserveradvisor.blogspot.com/2009/03/sql-server-linked-collation-performance.html", "unformatted_src": "http://2.bp.blogspot.com/_VOeVH3l2m1Q/ScAFSpdhkeI/AAAAAAAAACo/z0a89AfgE44/s400/linked-server.JPG", "src": "http://2.bp.blogspot.com/_VOeVH3l2m1Q/ScAFSpdhkeI/AAAAAAAAACo/z0a89AfgE44/s400/linked-server.JPG", "formatted_filename": "linked server"}, null, null, null, null, null, null, null]