Aside from the issue that this would be better done in the presentation layer (e.g. XSL, report etc), you can do it.
My solution would be to create an index table, then join to each of the table querie,s adding in a row identifier. Something like this (hopefully this translates to Mysql - I'm more of a TSQL person):
create table #index (indexnum int)
declare @minnum as int set @minnum=1 while @minnum<1000 BEGIN
insert into #index select @minnum set @minnum=@minnum+1 END
create table #paidgame (queryname varchar(100), recommendation varchar(100), price varchar (100))
create table #freegame (queryname varchar(100), recommendation varchar(100), price varchar (100))
insert into #paidgame select 'Game 1', 'Good', '£4.99' UNION ALL select 'Game 2', 'Good', '£3.99' UNION ALL select 'Game 3', 'Good', '£5.99'
insert into #freegame select 'Game 4', 'Good', '£0.00' UNION ALL select 'Game 5', 'Good', '£0.00' UNION ALL select 'Game 6', 'Good', '£0.00'
select * from
#index i left join (select * from (
SELECT QueryName,Recommendation,Price, dense_rank() OVER (ORDER BY queryname) as prank FROM #PaidGame pg ) aa ) t1 on t1.prank=i.indexnumn
left join
(select * from (SELECT QueryName,Recommendation,Price, dense_rank() OVER (ORDER BY queryname) as frank FROM #FreeGame fg ) bb) t2 on i.indexnumn=t2.frank
where t1.queryname is not null and t2.queryname is not null