Create the table structure
select sj.name,sjh.* into [CentralHistoryTable] from msdb..sysjobs sj
inner join msdb..sysjobhistory sjh on sj.job_id=sjh.job_id
where 1=0
For each server you want to pull data from (Though this will initially import all data and then only missing data)
insert into [CentralHistoryTable]
select sj.name,sjh.* from [linkname].msdb.dbo.sysjobs sj
inner join [linkname].msdb.dbo.sysjobhistory sjh on sj.job_id=sjh.job_id
full outer join [CentralHistoryTable] hist on hist.server=sjh.server and sjh.instance_id=hist.instance_id
where hist.name is null
Though you should put a clustered index on the table. Maybe something like this.
create clustered index CLX_HistoryTable on [CentralHistoryTable](run_date,run_time)
and maybe an index on the search fields
create index IX_HistoryTable on [CentralHistoryTable](server,instance_id)