Conceptual Question regarding necessity to do level shifting
No bi-directional level shifter needed on the I2C lines?

The I2C pins do not need a level shifter, as long as the MCP23017 and the MCU are both run at 3.3V, no level shifting is required since they are both operating at the same levels.

Their outputs would be 5V for HIGH which, I believe, can still be read by the MCP23017 safely even if only driven at 3.3V.

You will need to level-shift the inputs to the MCP23017 that are 5V though, since the 23017 can only handle VDD +0.6V, or a maximum of 3.9V. To do this, you can use a simple resistor-divider. You should size this such that the input is 3.3V, not 3.9V since 3.9V is an &quot;absolute maximum&quot; rating and may damage the device or severely reduce its lifetime.