Left join on one or the other column without table-scanning
When you have two separate indexes on transact and on transactchild the server can't use them efficiently when searching for (t.rid=blk.transact OR t.rid=blk.transactchild).

The classic way to handle this type of OR search is to split it into two simple searches and then UNION results together.

So, you can try something like this:

SELECT ....
FROM ...
LEFT JOIN table2 blk ON (t.rid=blk.transact)

UNION

SELECT ....
FROM ...
LEFT JOIN table2 blk ON (t.rid=blk.transactchild)


In this case individual simple query should be able to use corresponding index, but the extra UNION step can be quite expensive, especially if it requires a sort. 

If your data is such that you know that UNION ALL would produce correct result, then use UNION ALL, which is much more efficient than UNION. UNION eliminates duplicates, which is expensive. UNION ALL simply outputs results of two queries one after another.

If values in blk.transact do not overlap with values in blk.transactchild, then you can use UNION ALL.