Heat a large deep skillet or Dutch oven over medium heat. Add the butter, ground beef and diced onion. Cook for 5–7 minutes, breaking apart the beef as it cooks, until browned and the onion is tender. Drain excess grease if needed.
Stir in the garlic, tomato paste, Italian seasoning, garlic powder, onion powder, salt, and black pepper. Cook for about 1 minute, stirring frequently.
Pour in the beef broth and milk. Stir in the uncooked pasta and bring everything to a gentle boil.
Reduce the heat to medium-low and partially cover. Cook for 10–13 minutes, stirring every few minutes, until the pasta is al dente and most of the liquid has been absorbed. Add a splash of additional broth if needed as the pasta cooks.
Reduce the heat to low. Stir in the heavy cream, cheddar cheese, and Parmesan until the cheese has melted and the sauce is smooth and creamy.
Remove from the heat and let the pasta rest for 3–5 minutes. The sauce will continue to thicken as it sits. Serve warm.