How do I report progress of a long running transaction in MySQL?
There are some caveats that apply to mixing transactional and non-transactional tables in the same query, but in this case, you're actually doing it because the side effects are desirable... so I see no problem with the following suggestion:

The MEMORY storage engine seems like a good fit for this application.  It's non-transactional, so your "status" inserts/updates would be visible immediately to other threads.

Data stored in a MEMORY table persists until the table is truncated or the rows are deleted, or until the server is restarted.  In a replication environment, a restarted master will also direct the slaves to empty their copy of a memory table when the master restarts, since the master's table will start empty.  

Also, if you're doing this in a replication environment, a binlog_format of MIXED or ROW would likely be best, since those formats allow more deterministic replication, and determinism becomes more tricky when replicating a query with transactional and non-transactional tables.