To make the cheese sauce, set a medium saucepan over moderate heat with the butter. Once melted, whisk in the flour and cook for about 30 seconds. Slowly whisk in the milk and cook, stirring often, until the sauce has thickened, about 5 minutes. Season with salt, pepper, granulated garlic and onion. Remove from heat and stir in the cheeses until melted through and smooth. Cover and set aside.
To make the churros, place the water and salt in a medium saucepan over and bring to a simmer. Remove from the heat and add the flour, baking powder, and 1 tablespoon black pepper. Stir with a wooden spoon until the mixture forms a very stiff dough. Stir in 1/4 cup Parmesan and 1/4 cup Pecorino. Transfer the mixture to a sturdy piping bag, fitted with a star tip.
Fill a medium pot halfway up with oil and bring up to 350 degrees F, using a deep-fry thermometer. Once hot, carefully pipe out about 2 inches of dough right above the oil, and cut off with a pair of kitchen scissors. Continue piping in churros until you have about 4 to 6. You don't want to overcrowd the pot or else the temperature of the oil will drop. Fry for about 4 minutes, turning over halfway. Drain with a slotted spoon and transfer to a plate lined with paper towels to soak up the excess oil. Transfer to a wire rack, set over a baking sheet to prevent the churros from getting soggy while you continue to fry the rest.
Rewarm the cheese sauce over low heat, adding in about 1 to 2 tablespoons of milk if it's too thick. Pile the warm churros onto a large plate or platter and sprinkle with the remaining black pepper, Parmesan and Pecorino for garnish, and serve with the warmed cheese sauce for dipping.