There is not much you could optimize, it takes some time to delete data, which always cause an update in existing indexes as well. You could delete the data batch wise, let's say alway 10,000 records per batch =>
delete TOP (10000) FROM [MyDB].[dbo].[tbl_HostNTEvent]
where [HostNTEvent_TimeGenerated] < dateadd(day,-30,getdate())
and HostNTEvent_EventCode not in(4407, 4003)
GO 1000