Als Highside Treiber könntest Du natürlich auch einen UDN 2981 einsetzen.
Als Lowside Treiber wäre auch ein ULN 2003 möglich ( bzw. ULN 2803 ), anstatt der einzelnen Transistoren.

Ich denk mal, das dein Problem eher eine Timinggeschichte ist.
Leider schreibst Du nichts über die Struktur deines Programmes.
Ich vermute mal, das das Timing für das Multiplexing in einem Interrupt läuft.

Ich hab jetzt das 1wire Protokoll nicht auf dem Schirm, aber war da nicht was mit den Impulslängen? Dann:
Wenn dann während der Abfrage der Temperatursensoren eine Timer Interrupt auftritt werden die Temperatursensoren nicht mehr richtig ausgelesen ( Bitfehler ).

Das kann man nun auf verschiedene Weise lösen.

Eine Möglichkeit wäre den Timer Interrupt abzuschalten und das Timer Interrupt Flag im Hauptprogramm abzufragen, zu verarbeiten und wieder zu löschen.

Dadurch treten dann keine Timing Konflikte mehr auf, allerdings werden dann einzelne Segmente u.U. länger angesteuert, wenn gerade eine Komunikation mit dem 1 wire Bus läuft.
Da die Temperaturmessung vermutlich nur mal max 2x/ Minute gemacht wird, dürfte das aber kein Problem sein.

Eine weitere Möglichkeit wäre, während der 1wire Komunikation alle Interrupts per "CLI" zu sperren und dann sofort wieder freizugeben.
Dadurch werden aber natürlich alle! interruptbasierten Messungen ( Drehzahl ? ) beeinflusst!

Im ersten Versuch würde ich die CLI Variante ausprobieren, weil einfacher zu proggen.
Wenn dann alles geht, bestätigt sich mein Verdacht mit dem Timing.
Wie man das dann letztlich löst müsste man gucken.