But that's the point: your $ial will not be up-to-date when you join a chan. You have to /who all chan(s) to update your ial.
Try to delay the /who commands with a timer, or something like :

- set up a variable "%whochans" (this could also be a hashtable)

- on joining channels:
--- if there is no data in %whochans (it's the first chan you join) - who that chan
--- if there is data in %whochans (a who reply did not finish yet), add the new chans-to-who to that variable ($addtok)

- on raw "end of who":
--- if that chan is in %whochans, remove it from that data ($remtok)
--- if there is still data in %whochans (there are other chans-to-who waiting), who the next chan ($gettok).

This creats a "loop" that will not who all chans at once, (lag? floodkill?) but gradually (takes more time).

$chan(#name/N).inwho and $ial(#name/N).ial might also help.

You do not need the $ial (or who-replies) to colour nicks according to their channel status, as Riamus showed above.
But, if you want to use data like "ircop status" etc, store all data you need temporarily (grab the raw replies of /who and add user levels, or create a hash table, or...). This should not cause any lag. Having who'd all chans, and having all the data you need, colour them like Riamus suggested.