Dice the onion and jalapeno into small, uniform pieces for even cooking. Mince the garlic cloves freshly—this makes a real difference in brightness compared to pre-minced. Shred both the pepper jack and white cheddar from blocks (pre-shredded cheese contains anti-caking agents that can make the dip grainy). Have all ingredients measured and ready before you start cooking, as the next steps move quickly.
Remove the chorizo from its casing and crumble it directly into a large skillet over medium-high heat. Cook for 5-6 minutes, breaking it apart as it cooks, until it's browned and the fat is rendered. Transfer the cooked chorizo to a plate, leaving about 2 tablespoons of the chorizo fat in the pan—this is where the flavor lives. Add the diced onion and jalapeno to the pan and cook for 4 minutes until softened, then add the minced garlic and cook for another 1-2 minutes until fragrant.
Sprinkle the flour over the cooked aromatics and stir constantly for 1-2 minutes to create a light roux. This flour will thicken the dip and help bind everything together. Slowly pour in the rotel (with its liquid) while stirring to avoid lumps, then gradually add the milk while continuing to stir. I like to add the cumin here for better flavor distribution throughout the sauce. Increase heat to medium and cook for 4-5 minutes, stirring frequently, until the mixture thickens and coats the back of a spoon.
Reduce heat to low and add the shredded pepper jack and white cheddar from Step 1 in handfuls, stirring constantly until each addition is fully melted and incorporated. Low heat is essential here—too high and the cheese will break and become oily. Once the cheese is completely melted and smooth, stir in the cooked chorizo from Step 2 along with salt and black pepper to taste. The dip should be creamy and cohesive at this point.
Transfer the dip to an oven-safe serving dish or skillet. Place under a preheated broiler for 2-3 minutes, watching carefully, until the top is lightly browned and bubbly. Broiling creates a nice textured top and keeps the dip warm for serving. Remove from the broiler immediately to prevent over-browning.
Top the hot dip with fresh cilantro and crumbled cotija cheese for a salty, authentic finish. Serve immediately with tortilla chips and lime wedges on the side—a squeeze of fresh lime brightens the richness of the dip beautifully.