Cook the penne in salted water until al dente, about 11 minutes. Save ½ cup of pasta water, then drain.
Heat the olive oil in a large skillet over medium-high heat. Add the ground beef, ½ teaspoon salt, ½ teaspoon black pepper, garlic powder, onion powder, and Italian seasoning. Cook for 8–10 minutes until browned with slightly crispy edges. Transfer to a plate, leaving about 1 tablespoon of fat in the skillet.
Melt the butter in the skillet and cook the onion for 2–3 minutes. Add the garlic and stir for 30 seconds. Sprinkle in the flour and cook for another minute.
Pour in the heavy cream and milk, stirring as you go. Add the cream cheese and cook over medium-low heat for 3–4 minutes until melted and creamy.
Remove from the heat and stir in 1 cup mozzarella and ½ cup Parmesan. Add the remaining salt, black pepper, and red pepper flakes if using.
Add the penne and most of the browned beef. Gently mix everything together, adding a little reserved pasta water if the sauce is too thick.
Spoon into serving bowls and top with the remaining mozzarella, Parmesan, and beef crumbles. Let the cheese melt for 1–2 minutes, then sprinkle with parsley if desired.