In a bowl of cold water, soak fish for 8 hours or overnight, changing water at least two times. Drain water and transfer the fish to a saucepan. Discard soaking water. Cover the fish with fresh cold water by 1-inch and bring to a boil over high heat. Reduce heat to a simmer and cook for 15 minutes. Drain again and set the fish aside to cool. Discard water. When cool enough to handle, remove, and discard any bones and/or skin, and flake the fish into small pieces. Set aside.
In a large skillet, cook the bacon over medium heat until very crispy and all of the fat is rendered. Transfer the bacon to paper towels to drain and set aside. Pour off most of the fat, then add the butter to the skillet. Add the onions, cayenne, garlic, bell peppers, thyme, green onions, red pepper, and allspice and cook until the vegetables are tender but not browned, about 4 to 6 minutes. Add the tomatos, fish, and drained ackee and cook, stirring occasionally, for about 30 minutes. Season with salt and pepper, to taste, and serve alongside a plate of white rice or rice and beans cooked in coconut milk. Crumble the reserved bacon strips over the top of the ackee and serve.