In a large saucepan or small stockpot over medium heat, cook bacon, stirring occasionally, until crisp, 7 to 9 minutes. Use a slotted spoon to transfer to a paper towel-lined plate.
Add beef to the saucepan and cook, stirring occasionally and breaking it up, until no longer pink, about 2 minutes. Use a slotted spoon to transfer to a plate.
Set aside about ⅓ cup of onions. Add remaining onions and butter to the saucepan and cook, stirring occasionally, until tender, 7 to 9 minutes.
Add garlic and cook, stirring, until fragrant, about 30 seconds.
Sprinkle in flour, salt, and pepper and cook, stirring, for 1 minute.
Add broth and half and half or milk and bring to a boil. Reduce to a simmer and cook, stirring occasionally, for 5 minutes.
Add mustard, Worcestershire, and 2 ½ cups of cheese, stirring to melt cheese.
Stir in about ¾ of the bacon and ¾ of the beef. Add more salt and pepper to taste.
Serve soup garnished with remaining cheese, remaining bacon, remaining beef, reserved onions, and tomatoes.