5 ft = 1.52 metersThat is long for I2C. It means that the SDA and SCL might cause noise to each other, and perhaps also from the power wires to SDA and SCL.You need to select the wires in cable for SDA and SCL that has the least influence on each other.A single wire (not in a cable) for SDA and a single wire for SCL free in the air would be very ugly, but that would work.As far as I know, the Arduino Wire library has some timeouts, but it is not full proof against I2C bus errors. I have seen a number of propositions to improve it, but none of those are implemented in the library yet.The I2C is designed to be used within a pcb board, it was never designed to extend it into a cable.
Slower I2C, or lower pullup resistor, or an other cable.What do you use now for pullup resistors for SDA and SCL ?
The internal pullup resistors are 50k or 60k or something like that, that is useless with those wires.Every module with I2C could have pullup resistors. Try to find the schematics and calculate the total parallel pullup resistor value. A normal value would be 4k7, but you can try 2k2 (for the total parallel value).
Using no pullups (just the internal) and 3k9 is a big difference. But I can not guarantee it will work.If you give links to your modules, I can try to see if there are pullup resistors. Most modules have them.Can you try other values, like 10k ? or 22k ? If that already makes it work, then 3k9 will be good.The pullup resistors should be placed at the Arduino side. There is no science behind that, it is common use that the I2C Master has the pullup resistors.When all your modules are 5V modules, and they have a 5V I2C bus, you can connect the pullup to 5V.When one of the modules is a 3.3V module, you might fry it when the SDA and SCL are pulled to 5V. In that case you need to pullup to 3.3V. But if you have 5V I2C mixed with 3.3V I2C and longer wires, you better use a level shifter to get it right.You don't have to calculate the exact pullup resistor. You could have used 2k2 or 4k7. Some I2C devices allow a pullup of 1k (the total parallel pullup resistor), while other devices start grumbling with 2k2. So the rule of thumb is to use 4k7. The maximum value is about 10k, higher values makes the I2C bus vulnerable for electric noise, even if the I2C stays on a pcb board.
The pullup resistors should be placed at the Arduino side. There is no science behind that, it is common use that the I2C Master has the pullup resistors.