Heat a large pot of salted water to a boil over medium-high heat. Add the pasta and broccoli and cook until the noodles are al dente and the broccoli is tender, about 8 minutes.
Reserve 1 cup (240g) of the pasta cooking water. Drain the pasta and broccoli and return to the pot.
While the pasta cooks, heat a large saucepan over medium heat, add the oil and heat through. Add the butter and allow to melt, then add the shallots and sauté until tender, about 4 minutes.
Add the flour and cook, stirring constantly until the mixture is a pale golden color, about 1 minute. Whisk in the milk and bring to a simmer over medium-low heat. Continue to cook until thickened slightly, about 6 minutes.
Stir in the cheese until it’s melted into the sauce. Add the cayenne, paprika and season to taste with salt and pepper.
Pour the sauce over the noodles and stir to combine. Add the pasta cooking water, a little at a time to thin the sauce until creamy.