This looks like a good solution. Hopefully the team will review and adopt it.
A few comments ;)
1) can IWebHelper be injected (rather than Resolve() )?
2) a little cleaner
var guest = _customerRepository.Table.FirstOrDefault(x =>
x.LastIpAddress == currentIpAddress
&& !string.IsNullOrEmpty(x.Username)
&& !string.IsNullOrEmpty(x.Email)
&& !x.IsSystemAccount);
( .Where() will never return null, so no need for "?")
3) RE: " can Disable the DeleteGuests task as it will no longer be needed."
There are a lot of IP addresses out there (that may never come back). Best to adjust the customerSettings.DeleteGuestTaskOlderThanMinutes to be very large ;)