Вы можете пойти с чем-то вроде
string path = @"C:\Temp\XYZ";
string mainExtension = ".txt"; // optionally use
string companionExtension = ".xml";
var mainFiles = Directory.GetFiles(path); // or (path, "*" + mainExtension);
var companionFiles = Directory.GetFiles(path, "*" + companionExtension);
var filesWithCompanions = from file in mainFiles
from companion in companionFiles
where companion == file + companionExtension
select file;
Если каталог довольно большой, то что-то вроде приведенного ниже может быть более оптимальным
var companionQuery = companionFiles.Select(file => file.Replace(Path.GetExtension(file), ""));
var companionSet = new HashSet<string>(companionQuery);
var filesWithCompanions = mainFiles.Where(companionSet.Contains);