How to change default diff tools
You can specify an external diff tool by modifying the file map, in "c:\program files\rational\ClearCase\lib\mgrs"
The WinMerge suggested by Paul actually modifies that file.
Each map line has 3 parts: the CC filetype, the CC action, and the application. 
Find the section in the map file for text_file_delta file types. There you will find lines for CC actions compare, xcompare, merge, and xmerge which look like this:
text_file_delta   compare          ..\..\bin\cleardiff.exe
text_file_delta   xcompare         ..\..\bin\cleardiffmrg.exe
text_file_delta   merge            ..\..\bin\cleardiff.exe
text_file_delta   xmerge           ..\..\bin\cleardiffmrg.exe
You can replace them by the executable of your diff tool choice.
Or, a simple diff script
If you want to go full command-line on this (which I like ;-) ), a little ccperl can help:
#!/bin/perl
my ($file, $switches) = @ARGV;
$switches ||= '-ubBw';
my ($element, $version, $pred) 
    = split(/;/,`cleartool describe -fmt '%En;%Vn;%PVn' $file`);
unless ($pred) { die "ctdiff: $file has no predecessor\n"; }
exec "mydiff $switches $element\@\@$pred $file";
Warning: extended pathname (@@\...) is only accessible in dynamic view (M:\..., not snapshot view (c:\...).
The script has nothing to do with the mapfile presented above: 
- that file defines 'Type Merge Managers'. 
- This script allows you to run any merge manager on any file you want, without reading any map file to look for the right diff exe to use for a given file.
Here, you provide to the script both informations: the file (as a parameter) and the diff exe to run (within the script implementation: replace mydiff by whatever diff exe you want).
Or, improved diff script (works in static/snapshot views too)
Here is a version of this script which works for both snapshot and dynamic view.
For snapshot view, I use the chacmool's suggestion: cleartool get.
Again, you can replace the diff command included in this script by the tool of your choosing.
#!/bin/perl
my ($file, $switches) = @ARGV;
$switches ||= '-u';
my ($element, $version, $pred) 
    = split(/;/,`cleartool describe -fmt '%En;%Vn;%PVn' $file`);
unless ($pred) { die "ctdiff: $file has no predecessor\n"; }
# figure out if view is dynamic or snapshot
my $str1 = `cleartool lsview -long -cview`;
if($? == 0) { dodie("pred.pl must be executed within a clearcase view"); }
my @ary1 = grep(/Global path:/, split(/\n/, $str1));
if($str1 =~ /View attributes: snapshot/sm) { $is_snapshot = 1; }
my $predfile = "$element\@\@$pred";
$predfile =~ s/\'//g;#'
#printf("$predfile\n");
if ($is_snapshot) { 
  my $predtemp = "c:\\temp\\pred.txt";
  unlink($predtemp);
  my $cmd = "cleartool get -to $predtemp $predfile"; printf("$cmd\n");
  my $str2 = `$cmd`;
  $predfile = $predtemp;
}
sub dodie {
    my $message = $_[0];
    print($message . "\n");
    exit 1;
}
exec "diff $switches $predfile $file";