Set a large deep skillet or pot over medium high heat. Add a little olive oil if needed, then the ground beef and onion. Cook 5 to 7 minutes, breaking it up, until browned. Drain extra grease.
Add garlic and cook about 30 seconds. Stir in tomato paste, Italian seasoning, paprika, garlic powder, onion powder, salt, and pepper. Cook 1 minute.
Pour in tomato sauce, beef broth, cream, and milk if using. Stir well, then add the uncooked pasta shells.
Bring to a gentle boil, then reduce heat to medium low. Cover and simmer 12 to 15 minutes, stirring every few minutes, until the shells are tender and the sauce is thick and creamy. If it gets too thick, splash in a bit more broth or milk.
Turn heat to low. Stir in cheddar and Parmesan until melted and smooth. Taste and adjust salt and pepper.
Let sit off the heat 3 to 5 minutes so the sauce clings to the shells. Garnish with parsley or green onions if you like and serve right from the pan.
