Place chicken in a bowl with the buttermilk. Let sit in the refrigerator for at least 8 hours, or overnight.
Place the flour, salt, and cayenne in a large brown paper bag and gently shake to combine (a large plastic bag or bowl works, too).
Remove chicken from the buttermilk. Add one piece at a time to the bag, hold closed, and shake until thoroughly coated.
Transfer coated chicken to a wire rack. Repeat with remaining pieces. Let the chicken rest for at least 30 minutes (up to 1 hour) before frying.
Heat the oil and butter together in a large cast iron skillet or Dutch oven over medium-high heat. When the oil is hot (a drop of water sizzles), add chicken without crowding the pan.
Cover and cook until golden brown, about 8-10 minutes. Turn pieces over, cover again, and cook about 10 more minutes (white meat to 165°F, dark meat to 170-175°F).
Drain on a wire rack. Season with salt and pepper while still warm. Repeat with remaining chicken in batches. Serve warm, at room temperature, or cold.