I did exactly the same things that were suggested in this article, either inverted conditionals, or had a thunk - essentially "jmp nextJump", where that jumped to the actual location.
I sometimes spent a few hours shuffling code around to remove the longer jumps and re-order code in groups closer together to save individual bytes.
BGEZAL $zero, . + 8
ADDIU $at, $ra, 0
LUI $t7, hi16(offset)
ORI $t7, $t7, lo16(offset)
ADDU $t7, $ra, $t7
JR $t7
ADDIU $ra, $at, 0