ArcMap has to check it before display the objects in map. This isn't how it works. ArcMap executes the definition query against the data source and draws whatever features are returned by the query. It doesn't parse (or analyze) the query or anything like that. If you want to check to see if features with a certain attribute value are visible then one of the easiest ways is to just query the layer for them and see if you get anything back. If you don't get any results from your query, then none are visible. In order to do this, you need to use a Search method that is aware of the definition query. You can use IDisplayTable.SearchDisplayTable(), IGeoFeatureLayer.SearchDisplayFeatures() or IFeatureLayer.Search().