Bring a pot of salted water to a boil. Cook the medium shells according to the package directions until cooked through but still firm enough to hold their shape. Reserve a little cooking water, then drain well. Make the sauce while the pasta cooks.
In a large, deep skillet or Dutch oven over medium-high heat, cook the ground beef, breaking it into small pieces. Add the diced onion while the beef is browning. Cook until the beef is browned and cooked through and the onion is soft, about 5–7 minutes. Drain off excess fat.
Add the minced garlic and stir for about 30 seconds. Stir in the tomato paste and cook for 1 minute, spreading it through the beef and stirring along the bottom of the skillet.
Add the tomato sauce, ½ cup water or low-sodium beef broth, Italian seasoning, smoked paprika, kosher salt and black pepper. Stir to combine. Bring to a gentle simmer, reduce the heat to low and simmer for about 5 minutes.
Remove the skillet from the burner. Stir in the heavy cream, then gradually add the grated cheddar and Parmesan, stirring between additions until melted. If needed, use very low heat briefly to finish melting the cheese. Avoid boiling the cheese sauce.
Fold the drained shells into the creamy beef sauce until evenly coated. If the coating is too thick, add a tablespoon of the reserved cooking water at a time until loosened. Taste and adjust the seasoning if needed. Serve warm, with the optional parsley if desired.