In a medium frying pan over medium heat, heat oil and cook onion, stirring occasionally, until soft and deep golden brown, 10 to 15 minutes. Let cool.
Mix cheeses together in a small bowl.
Top 2 bread slices with cheese mixture, smushing it evenly onto the bread. Top with caramelized onions and tomato, then other two bread slices.
Butter outsides of each sandwich.
Heat a large well-seasoned cast-iron skillet or a large, heavy nonstick pan over medium heat for a minute.
Place sandwiches in skillet and cook until golden-brown underneath, 5 to 7 minutes. Flip and cook the other side until it's just as toasty. Low and slow is the key. Cheese will probably ooze out, but that's okay. It gives the sandwiches a nice crunchy fringe.