Ответом для меня было передать коллекцию полей / столбцов, которые будут игнорироваться в маппере. Это потребовало от меня проверки сбора данных на наличие пустых значений во всех строках, если так, то я могу полностью пропустить этот столбец. Затем я передаю эту коллекцию requiredFields в маппер следующим образом.
public sealed class ApplicationCsvWriterMap : ClassMap<ApplicationDto>
{
public ApplicationCsvWriterMap(List<string> requiredFields)
{
Map(m => m.Id).Index(1).Name("AppId").Ignore(!requiredFields.Contains("id"));
Map(m => m.Status.Text).Index(2).Name("Status").Ignore(!requiredFields.Contains("status"));
Map(m => m.ApplicationTimestamp).Index(3).Ignore(!requiredFields.Contains("applicationTimestamp"));
Map(m => m.LastModified).Index(4).Ignore(!requiredFields.Contains("lastModified"));
Затем я могу настроить маппер следующим образом, передав коллекцию requiredFields примерно так
else if (results.Data is List<Application> applications)
{
csvWriter.Configuration.RegisterClassMap(new ApplicationCsvWriterMap(results.RequiredFields));
csvWriter.WriteRecords(_dtoMapper.MapApplications(applications));
}