Special equipment: a thick plastic piping bag fitted with a large star tip
For the churros: Heat 2 inches of vegetable oil in a large cast-iron skillet to 360 degrees F.
Put the milk, butter, granulated sugar, salt and 1 1/4 cups water in a medium saucepan over medium-high heat and bring to a boil. Mix the flour and baking soda together in a small bowl.
Remove the water mixture from the heat and, with a wooden spoon, stir in the flour mixture. Continue to stir until the mixture comes together in a ball, 1 to 2 minutes. Set aside to cool for 5 minutes while making the caramel.
For the caramel: Combine the brown sugar, half-and-half, butter and a pinch of salt in a saucepan over medium heat. Cook, whisking gently, until starting to thicken, 4 to 5 minutes. Add the vanilla and cayenne and cook for an additional minute. Transfer the mixture to a dipping bowl.
Working in 2 batches, transfer the batter to a thick plastic piping bag fitted with a large star tip. Pipe tubes about 5 inches in length into the hot oil. Cook until dark golden brown, 2 to 3 minutes. Remove with a slotted spoon to a paper towel-lined baking sheet.
For the coating: On a separate baking sheet, mix the granulated sugar and cinnamon. Roll the warm churros in the cinnamon mixture and transfer to a serving platter. Repeat with the second batch of batter. Serve alongside the caramel.