SELECT ST_Distance(a.way,b.geom) as d, a.name from
(SELECT way::geography, name from ga_osm_latlong_polygon) a,
(SELECT 'POINT(-6.2222 53.307)'::geography as geom) b
where ST_DWithin(a.way, b.geom, 1000)
order by ST_Distance(a.way,b.geom), name;

But the first version might be faster because avoiding ST_Distance to run twice.

But to get this working well of course you will need the spatial index
Now when I write it I realize that the casting to geography might be a showstopper for the index. If so, I would suggest you make a geography column instead and build a proper index on that. A working index makes a difference like night and day here.

Update:
Or maybe you can create the index with the geography type directly. I have not tried, but might be worth trying: like this:

Thanks! for some reason the type 'geography' is not defined in my PostGIS. What I need is actually the objects (stored in lat/lon) within a radius in meters, that's why I'm transforming everything in mercator. Any other approach for that?
–
MuloneFeb 3 '11 at 10:48

ST_Distance() includes a implicit bounding box check (which can be done against the index) from version 1.3 on, BUT you are checking way AFTER a ST_Transform, which means that the query has to scan all rows. Could try to rewrite the query leaving way in its original SRID? Like ST_Distance(way,ST_Transform(...,<srid of way>))?