How do dirty reads at both the transaction and table level provide increased performance?
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED is at the transaction level or at the session level while NOLOCK is a query hint. 

You mentioned that you fully understand dirty reads, so using at the transaction level is what I would recommend.

if you want dirty reads on some tables only, then NOLOCK hint will help you.

SQL server 2005 and up allows you to use SNAPSHOT isolation where readers don't block writers and it uses row versioning with some penalty on tempdb.

essentially SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED and NOLOCK are same thing but the use depends on the context of what you are using.