To me, your way is (slightly) dangerous. Primarily because you have no control over the host. As a device, you should make every attempt to support whatever can be thrown at you. if your device will be used in a controlled environment, you will probably be okay. If you plan to mass-market this device, you may not be in as good of shape.
I typically have a state machine where I am either talking or listening. If I am talking, I care about interrupts that put me to be a listener (ADSC). If I am listening, I care about interrupts that could put me to be a talker (DO).
Startup: Enable DO interrupt, start a read
Rx DO interrupt: Enable ATN, IFCI, and ADSC interrupt to know when we go from TACS->!TACS, start a write
Rx ADSC Interrupt: If LA, clear ATN and IFCI interrupt and Enable DO
interrupt to know when we go from LA->TACS, start a read.
RX ATN or IFC: Disable ATN and IFC interrupts, Enable DO interrupt to know when we go from !TACS->TACS.
I have had very good performance with this method. I don't recall all of the nitty gritty details since there are a few of course, but in general I try to only cancel my read when I actually go to TACS (DO interrupt) and I only cancel my write when I actually go to LA (ADSC interrupt if LA). I don't 100% recall why I need to know TACS->!TACS, but I think it had to do with knowing everytime BRQ came or disappeared for the 488.2 MEP state machine.