In a large Dutch oven, melt 2 tablespoons of the butter over medium heat. Add the onion and garlic and cook until soft and translucent. Stir in the carrots and cook for 2–3 minutes.
Add the chicken, season with salt and pepper, and lightly cook, stirring as needed. The chicken doesn’t need to cook through at this point, as the chicken will cook in the sauce as it continues to simmer.
Add the remaining butter and stir until melted. Sprinkle in the flour and stir into the chicken and vegetables until evenly coated.
Slowly stream in the chicken stock while stirring. Stir in the milk and let simmer until the sauce thickens slightly, about 5 minutes.
While the sauce is thickening, bring a pot of salted water to a boil and cook the pasta 3 minutes shy of al dente, according to the package directions.
Add the shredded cheese and spinach to the sauce. Stir until the cheese melts and the spinach wilts. Taste and adjust seasoning with salt and pepper.
Reserve 2 cups of the pasta water, then drain the pasta. Add the pasta to the sauce and continue cooking until al dente, about 3 minutes. Add reserved pasta water as needed to loosen the sauce. Stir and toss until glossy, creamy, and perfectly al dente. Enjoy hot!