Large time difference between two almost identical simple queries....why?
I am willing to bet the issue is that the first does a scan of the table, while the second can look things up from an index.  This happens all the time.  The reason, as Phil has said, is that there are an infinite number of possibilities.

If you want to make the first approach work better with more flexibility you need to use a recursive query structure.  Something like:

WITH RECURSIVE sparse_scan AS (
    SELECT m.Metadata, COUNT(*) As Count
      FROM TWG10MinData twg, Metadata m
     WHERE twg.metadata = m.Metadata and m.Metadata = 1100
  GROUP BY m.Metadata
 UNION ALL
    SELECT m.Metadata, COUNT(*) As Count
      FROM TWG10MinData twg, Metadata m
      JOIN sparse_scan s ON (m.Metadata = s.Metadata + 1000)
     WHERE twg.metadata = m.Metadata 
  GROUP BY m.Metadata
)
SELECT * FROM sparse_scan order by m.Metadata;


This works differently, running the query for 1000, 2100, 3100, 4100, etc, until a row is not returned.  You can be a little fancier to skip cases where a row does not exist but the next one does, but the basic approach  is something I use frequently, albeit on PostgreSQL.