You can take this approach. This would work well if all these files are created in order. If you are expecting any gaps, you can add additional logic. However, its safe to add a check if file exist before creating the file
string dirPath = @"C:\BackUp";
string fileName = "BackUp";
string[] files = Directory.GetFiles(dirPath);
int count = files.Count(file => { return file.Contains(fileName); });
string newFileName = (count == 0) ? "BackUp.bak" : String.Format("{0} ({1}).bak", fileName, count + 1);
In all the other solution disk IO depends on number of files already exists. In this case its just one.