The first thing I notice when reading your post, is the large amount of columns you join on, which probably means a great deal of duplicate data between your tables. Have you considered whether it is possible to denormalize your tables? If the multiplicity of the relationship between the tables is small, that might be a good option.
That said, it is usually a good idea to put indexes on the columns you seek on, e.g. those that you join on (expense, code, name, price, charges, url and id).
Specifically, you could try creating a compound index on each table containing the columns you join on (expense, code, name, price, charges, url in that order), and an index on the id column of table t2.
Hope it helps.