'$user->Profile' should be the variable set by getCollectionGraph() (based on the second argument).
Using extended fields as a search criteria is quite slow and tricky because the extended fields are stored as a single JSON string containing all the data. There's also no good way to sort the results based on an extended field.
There are two possible solutions, and if the database will become large, you really should use one of them.
One is to store the data in other user profile text fields that you're not using (e.g., comment, phone, mobilephone, address, city, state, zip, fax, photo, website). You have to be careful about the maximum size of each field. This is kind of a hack, and it's a pain because the fields will all have the wrong names and you have to remember which is which. It's really only useful if you need a very small number of data fields, you're sure you won't be adding more, and you have enough unused profile fields.
The more robust method (though a little more work to set up) is to use
ClassExtender to extend the user object. This gives you unlimited fields with the correct names and very fast searching and sorting. In this case, your getCollectionGraph() call will be different. I'd suggest adding an 'active' field that mirrors the 'active' field of the modUser object to the custom fields (and username, if you need that too). That way, you won't have to access the modUser table at all and the queries will be faster. For even more speed, you could also mirror any fields you need from the modUserProfile object. That way you could just query the custom table with getCollection(), which is faster than getCollectionGraph(). You should be able to get all the users you need with a single query and use toArray() on them to set your placeholders.