In a medium bowl, combine the tomatoes, onion, garlic, cilantro and jalapeño (if using).
In a small bowl, whisk the mayonnaise and sour cream until combined. Season to taste with the halved lime, salt, pepper and chipotle (if using).
In a medium bowl, mix together the flour, chili powder and 1 1/2 teaspoons each of kosher salt and black pepper. Pour the milk into another medium bowl, and place the fish into it.
Pour 1/4 cup of the peanut oil into a 12-inch frying pan and place over medium-high heat until it shimmers and is about to smoke.
Remove the fish pieces from the milk bath and dredge them lightly through the flour mixture, shaking to remove excess. Add the butter to the pan. Place some fish pieces in the oil, without crowding them, and cook until deep golden brown on one side, 3 to 4 minutes. Turn carefully and cook for 1 minute more. Remove to a warmed, paper-towel-lined plate and sprinkle with salt. Repeat with the remaining fish.
Meanwhile, lightly grease a skillet with a drizzle of oil and set over medium heat. Heat the tortillas, one or two at a time, until they are soft and hot. Keep them warm, wrapped in a dish towel.
Fill each tortilla with 3 pieces of fish, browned side up, followed by tomato salsa and a pinch of cabbage. Drizzle with the cream sauce. Serve 2 to 3 tacos per person, with lime wedges and hot sauce on the side.