Heat olive oil in a large deep skillet over medium heat. Add the chopped onion and cook for 5 to 8 minutes, stirring occasionally, until soft, golden, and translucent. Add the minced garlic and stir constantly for about 1 minute until fragrant.
Add the ground turkey and break it apart with a spatula. Cook over medium heat for 5 to 7 minutes until no pink remains and any moisture has evaporated from the pan. Season well with salt and pepper.
Pour the dry pasta directly into the skillet and stir to coat in the pan juices. Pour in the chicken broth so most of the pasta is just covered. Bring to a light boil, then reduce to a steady simmer. Cover and cook for 8 to 10 minutes, stirring once or twice. Uncover and let excess liquid evaporate for 1 to 2 minutes once pasta is nearly tender.
Stir in the baby spinach and let it wilt from the heat, about 1 minute. Pour in the half and half and stir gently. Simmer for 2 to 3 minutes until the sauce is slightly thickened and creamy.
Reduce heat to low. Sprinkle mozzarella and parmesan over the skillet and stir gently until fully melted and the sauce is silky. Taste and adjust salt if needed. Let sit off the heat for 2 to 3 minutes before serving so the sauce thickens up.
