Hi,
I came up with a work around. First I considered a geoprocessing task and wrote some python that produced a list of attachment names to be returned but this had some downsides. One being that it required knowing about the location and structure of the geodatabase, which is organised differently from the published service, so you can work out the layer ids the attachments related to. It was also susceptible to changes made by the GIS team as would need to be manually changed if they moved things around. Finally, of course, it would only work for map services on our own GIS servers where we can actually write our own geoprocessing tasks.
So, instead I wrote an indexer service. It's just a C# console application that runs as a Windows service. It requests the MapServer json for a service to get the list of layers, then for each layer gets the list of object ids then for each object id, gets the attachmentinfo. If there are attachments, it puts the details in the database. I then just wrote a WebAPI webservice that queries against this index, rather than directly against the ArcGIS server. It works really well: the query is very fast and it can index any map service, not just our own. Of course, the caveat is it's only as up to date as the last time it indexed the service, but that can be done as often as you need.