Column-by-column GetBulk response

Sure, column-by-column is directly supported by the GETBULK SNMP PDU type. Thus, for your requirements it is sufficient to send a sing GETBULK PDU with maxRepetitions set to the maximum number of rows in the table.

Easier to use, however, is the TreeUtils.walk method which will provide all rows even if they do not fit in a single response PDU:
https://www.agentpp.com/doc/snmp4j/org/snmp4j/util/TreeUtils.html#walk(org.snmp4j.Target,org.snmp4j.smi.OID[])

Hope this helps?