TempDB

why With Tablock? What happens if you remove that? Could your query be waiting on others?

Are your join on columns indexed? If not they should be. Even so, you need to change your expressions like:

isnull(a,'(novalue)') = isnull(b, '(novalue)')

to

(a = b or a is null and b is null)

to take advantage of indexing.