Could it all be as simple this: a single delete operation that leverages an output clause to insert deleted rows into a history table? If this were to be scheduled to execute every hour (instead of daily or every five days) then it will roll over a few hundred thousand rows at a time into the history table, and it's all included in a single implicit transaction.
create table PrintJobs
(
JobID int not null identity(1,1) primary key
, PrintDate datetime default getdate()
);
create index ix_PrintDate on PrintJobs ( PrintDate );
create table PrintJobsHistory
(
JobID int not null primary key
, PrintDate datetime
);
delete from PrintJobs
output deleted.JobID, deleted.PrintDate
into PrintJobsHistory ( JobID, PrintDate )
where datediff( day, PrintDate, getdate() ) > 5;
"Do not seek to follow in the footsteps of the wise. Instead, seek what they sought." - Matsuo Basho