Cook the macaroni according to package instructions; drain and set aside.
In a large skillet, cook chopped bacon over medium heat until crisp. Remove with a slotted spoon and set aside on paper towels.
Drain excess bacon grease, leaving about 1 tablespoon in the skillet. Add butter and melt over medium heat.
Whisk in flour and cook for 1 minute to form a roux. Slowly whisk in milk and half-and-half until smooth.
Season with salt and pepper. Continue cooking, whisking constantly, until the sauce thickens.
Stir in cheddar cheese until melted and smooth.
Add diced tomatoes, cooked macaroni, and bacon to the sauce, stirring to combine.
Transfer mixture to a greased 9x13-inch baking dish. Sprinkle with mozzarella and Parmesan cheese.
Broil for 2-3 minutes until the top is bubbly and golden. Serve warm.