Cook chopped bacon in a Dutch oven over medium heat for 6–8 minutes until crispy, then transfer to a paper towel-lined plate, leaving about 2 tablespoons of fat in the pot. Add butter and let it melt completely.
Add diced onion and celery to the pot and cook for 5–6 minutes until softened and translucent. Stir in minced garlic and cook for 60–90 seconds until fragrant but not browned.
Stir in the cubed potatoes, then pour in the seafood stock and clam juice. Add bay leaves, thyme, smoked paprika, cayenne (if using), salt, and pepper; stir to combine and bring to a boil over medium-high heat.
Reduce heat to medium-low, partially cover, and simmer for 15–18 minutes, stirring occasionally, until potatoes are tender when pierced with a fork but still hold their shape.
For a thicker chowder, use a potato masher to gently mash about a quarter of the potatoes in the pot, or blend 1 cup of the soup until smooth and stir it back in.
Reduce heat to low and gently add the fish chunks, distributing them evenly. Cook for 4–5 minutes without stirring too much, until the fish is opaque and flakes easily but still holds together.
Pour in the heavy cream and milk, stirring gently, then heat through for 2–3 minutes without boiling. Remove bay leaves, stir in parsley, dill, and lemon juice, and adjust seasoning to taste.
Ladle into bowls, top with reserved crispy bacon and extra parsley, and serve immediately with oyster crackers or crusty bread and a lemon wedge on the side.