On the MQTT client side, if I use, for example, 30-second for MQTT Keep Alive (PINGREQ/PINGRESP), what TCP Keep Alive value should be used for the MQTT socket? Would that be okay to simply set TCP Keep Alive to 0? It seems very much redundant for the MQTT protocol.
It seems you answered your question yourself
TCP KA packet serves probing purpose (and only if there was an activity) after connection establishment. If you have any other probing method, then KA becomes useless. The useful thing about KA is that it is performed in background without application involvement.