I agree with your poking.
How would you address the situation?
I think you've done fine, perhaps even continued to engage the person longer than you should have. You can't teach people who are unwilling to learn. And it sounds like he just wants to argue or fight with you, rather than taking constructive advice on asking questions and using the tag system, so there's no reason to get into a fight. (Unless you enjoy that sort of thing like I occasionally do, but then the moderators might lumber down from the mist and shake their collective fists at you.) You've offered the best advice you have to give; it's now up to the person receiving it to decide what to do with it. If that decision is to ignore it, well then that's their call.
Personally, I'd be likely to vote to close it as "not a real question".
Yes, I agree. Either that or "not constructive". It sounds like there's no real problem to be solved here, which is a requirement for all questions per the FAQ. There's really not enough information or context provided in the question to make it answerable. And as usual when it comes to "performance" questions, the correct answer is always the same: use the algorithm/write the code that makes sense, then profile it. Only "optimize" if necessary.
But do be careful not to cast close votes out of frustration. I've been tempted to do that before, but most of the time, I think I catch myself before actually clicking. Only cast close votes if you legitimately think that there's something wrong with the question, not just because the asker is stubborn and refuses to take the good advice you're offering. Same thing with downvotes—vote on the substance of the question, not the attitude and/or form of the asker.
There is still ongoing debate/confusion regarding the tagging system and the use of multiple tags. We see this come up a lot when people ask questions about the .NET BCL, and in addition to appropriately tagging .net, they'll also tag their question with c# and vb.net. When one inquires as to why they've done that, they say that they don't care which of those two languages the solution is in, because they can read/understand both of them. Well, of course—any good .NET developer can.
I think the simple solution to this problem is to follow the rule that the tags apply to/describe the question, not all the [possible] answers. In the above contrived example, the question is about the .net BCL methods, not the c# or vb.net languages. The answers might include sample code in either or both languages, but that's irrelevant to how the question is tagged. Same thing here.
But all in all, it's rarely a battle worth fighting. The whole point of the tag system is to make questions sortable and to ensure that they reach the people with the best chance of answering them. Lots of smart and prolific answerers follow the c# tag, so lots of people like to throw this tag on their questions in hopes of maximizing their exposure and getting an answer from one of those people. As long as it reasonably applies to the question, I say there's little harm in leaving it be.