Preheat your oven to 400 degrees F.
Heat the olive oil in a saucepan over medium-high heat. Add the onions, smashed garlic, sage, and red crushed pepper. Cook for 3-4 minutes.
Stir in the chicken broth and bring to a boil. Once it comes to a boil, cover, reduce the heat to medium-low, and cook for 15 minutes or until the butternut squash is fork-tender.
Allow the butternut squash to cool for a few minutes, discard the sage, and then place it in a blender and blend until smooth.
Add the butter to a large skillet with high sides and allow the butter to melt completely. Whisk in the flour and cook for 1-2 minutes.
Stir in the whole milk and cook for 5-6 minutes or until the sauce thickens. Make sure to stir frequently.
Once the sauce is nice and thick, turn off the heat and add 2 cups of cheddar cheese, 1 cup of gruyere cheese, and butternut squash puree. Mix until well combined.
Season the sauce generously with salt and pepper. I find that this sauce needs a lot of salt, so make sure to season it very generously.
Fold in the cooked pasta and check for seasoning. Pour the pasta into a 9x13 casserole dish and top it off with the remaining cheese.
Bake for 10 minutes and broil for 1-2 minutes. Allow it to cool for a few minutes, and enjoy!