Heat olive oil in a skillet over medium heat. Add chopped onion and sauté until soft, about 3–4 minutes.
Add ground beef and cook until browned, breaking it apart with a spoon. Drain excess grease.
Stir in tomato paste, Worcestershire sauce, garlic powder, onion powder, salt, pepper, and ketchup. Simmer for 5 minutes. Remove from heat.
Butter one side of each bread slice. Place 4 slices butter-side-down in a skillet over medium heat.
Top each with 1 slice of cheese, a scoop of sloppy joe mixture, another slice of cheese, and a second bread slice, butter-side-up.
Cook until golden brown and cheese melts, about 2–3 minutes per side. Serve hot.