Heat a large skillet over medium heat. Add the ground beef and cook until browned, breaking it up with a spoon as it cooks.
Add the chopped onion and garlic, and sauté for 2–3 minutes until fragrant and softened.
Season with paprika, Italian seasoning, salt, and black pepper. Stir well to coat the beef evenly. Remove from heat and set aside.
2. Make the Creamy Sauce
In a medium saucepan, melt the butter over medium heat.
Add the flour and whisk continuously for about 1–2 minutes to form a roux. This will thicken your sauce and eliminate any raw flour taste.
Gradually pour in the warm milk while whisking to avoid lumps. Cook for 4–5 minutes, stirring until the sauce thickens.
Add the heavy cream (if using), shredded cheddar, and Parmesan cheese. Stir until the cheese is fully melted and the sauce is smooth. Remove from heat.
3. Assemble the Casserole
Preheat your oven to 375°F (190°C).
In a large mixing bowl, combine the cooked pasta or potatoes, beef mixture, and half of the creamy sauce. Mix until everything is evenly coated.
Transfer the mixture into a greased baking dish.
Pour the remaining sauce over the top and spread it evenly. Sprinkle the shredded mozzarella cheese generously over the top.
4. Bake
Place the casserole in the preheated oven and bake for 20–25 minutes, or until the cheese is golden and bubbly.
For an extra crispy topping, switch to the broiler setting for the last 2–3 minutes of baking.
5. Serve
Remove from the oven and let it sit for 5 minutes before serving. Garnish with chopped parsley if desired.