You could use a custom tilemap of your original textbox to create a frame for your mugshots. This way you don't have to concern in any way about palattes because it is already there from the textbox itself. For the image itselt you would have to use an OAM slot, I don't think there is enough space for even a 16c image on background 0. Using OAM you could probably also take advantage of mirroring and so on. Well, that's in fact less than a brief concept, for implemantation you might want to create a special / callasm(which is basically the same) or implement this directly into the message command which can be found in the command table(not exactly sure how to deal with that, a special would probably way easier)
Lasttalked does save the person ID from which you do not directly get the overworld ID. You would have to parse the number first and go through a lot of pain in the ass work. You would maybe do better with some sort of two dimensional table to get things like: ["Professor tree"; "happy expression"]
If you only want that for pokémon and don't need different expressions you can use a one dimensional table for sure, or a table that points to some sort of substructure which then stores the single expressions for the person.