Database getting larger and larger, that's their nature. In the same way backups of the database getting larger, needing more and more time to finish; this can cause serious problems in productive enviroment.
Also, where to backup extrem large database to? A split over several drives would be nice.
SQL Server provides a build-in function to strip SQL Server database backups over several files and they can be spread over several drives/folder to increase the through-put. This can (significant) increase your backup performance as well as the one for restoring.
Unfortunately you can't create a maintenance plan to backup this way, but ...

This PowerShell script performs a striped backup for all databases from given list spread over all predefined folders.
Additional it creates restore T-SQL scripts for easily restoring it a case of failure.
You could run this script with a SQL Server-Agent job to maintaine yor backups frequently.

PowerShell
Skript bearbeiten|Remove
<# 
  .SYNOPSIS 
    Striped Backup of Sql Server Databases 
  .DESCRIPTION 
    Database getting larger and larger, that's their nature. In the same way backups of the database getting 
    larger, needing more and more time to finish; this can cause serious problems in productive enviroment. 
    Also, where to backup extrem large database to? A split over several drives would be nice. 
    SQL Server provides a build-in function to strip SQL Server database backups over several files and they 
    can be spread over several drives/folder to increase the through-put. This can (significant) increase 
    your backup performance as well as the one for restoring. 
    Unfortunately you can't create a maintenance plan to backup this way, but ... 
    This PowerShell script performs a striped backup for all databases from given list spread over all 
    predefined folders. 
    Additional it creates restore T-SQL scripts for easily restoring in a case of failure. 
    You could run this script with a SQL Server-Agent job to maintaine yor backups frequently. 
  .CONFIGURATION 
    $servername: 
      The name of the SQL Server instance where the database are hosted. 
    $folders: 
      A list of folders to write the backups to. 
      Tip: You can add one folder several times; the multiple files are created in that folder, even this 
      can increase the performance. 
    $scripts: 
      A folder name, where the RESTORE script will be saved; with this script you can easily & quickly restore 
      the database with the striped backup files. 
    $databases: 
      A list of database name, which should be backuped. If you leave it empty = @(), then the script backups 
      all databases of the SQL Server. 
    $compression: 
      If set to $true, the backup file will be compressed. Please note: backup compressions are only supported 
      in SQL Server 2008 Enterprise Edition or SQL Server 2008R2 Standard and higher editions. If your used 
      SQL Server don't support compression, the script will fail. 
    $withInfoMsg: 
      If set to $true, informations of the backup progress are printed to the host. 
  .REMARKS 
     The script do only less error handling and validations. 
  .NOTE 
    Author:  Olaf Helper 
    Release: 2011-12-07 
    Version: 1 
  .REQUIREMENTS 
    PowerShell 1.0 
    Permissions on the SQL Server to backup databases; at least db_backupoperator role for the db's. 
    Works with SQL Server 2005 and higher in all editions. 
  .LINKS 
    BACKUP (Transact-SQL) 
      http://msdn.microsoft.com/en-us/library/ms186865.aspx 
    Optimizing Backup and Restore Performance in SQL Server: 
      http://msdn.microsoft.com/en-us/library/ms190954.aspx   
#> 
 
# Configuration settings. 
[string]   $servername  = ".\sqlexpress"; 
[string[]] $folders     = @("C:\temp\Backup\", "C:\temp\Backup\", "C:\temp\Backup1", "E:\Backup2\"); 
[string]   $scripts     = "C:\temp\BackupScripts\"; 
[string[]] $databases   = @(); 
[bool]     $compression = $false; 
[bool]     $withInfoMsg = $true; 
 
# Function to remove for file names invalid chars /\ <> : | * ? " 
function removeInvalidChars 
{ 
    param([parameter(Mandatory=$true)] [String] $fileName) 
     
    $fileName = $fileName.Replace("/"""); 
    $fileName = $fileName.Replace("\", ""); 
    $fileName = $fileName.Replace(":"""); 
    $fileName = $fileName.Replace("<"""); 
    $fileName = $fileName.Replace(">"""); 
    $fileName = $fileName.Replace("|"""); 
    $fileName = $fileName.Replace("*"""); 
    $fileName = $fileName.Replace("?"""); 
    $fileName = $fileName.Replace("'"""); 
    $fileName = $fileName.Replace(""""""); 
     
    return $fileName; 
} 
 
if ($folders.Length -eq 0) 
{ 
    Write-Host "You should define at least one folder to backup to!" -ForegroundColor Red; 
    Break; 
} 
 
Clear-Host; 
Write-Host ((Get-Date -format yyyy-MM-dd_HH:mm:ss) + ": Starting ..."); 
 
# Open ADO.NET Connection with Windows authentification. 
$con = New-Object Data.SqlClient.SqlConnection; 
$con.ConnectionString = "Data Source=$servername;Initial Catalog=master;Integrated Security=True;"$con.Open(); 
$cmd = New-Object Data.SqlClient.SqlCommand; 
$cmd.Connection = $con; 
 
if ($withInfoMsg) 
{ 
    # Register event "InfoMessage" and define action for it.  
    $nil = Register-ObjectEvent $con "InfoMessage" -SourceIdentifier "PoShStripedBackup" -Action ` 
    {  
        [Data.SqlClient.SqlInfoMessageEventArgs] $info = $Event.SourceEventArgs; 
        Write-Host ((Get-Date -format yyyy-MM-dd_HH:mm:ss) + $info.Message);     
    } 
} 
 
# If the list of databases is empty, query all names from Sql Server. 
if ($databases.Length -eq 0) 
{ 
    [string] $sql = "SELECT [name] FROM sys.databases ORDER BY [name];"; 
    $cmd.CommandText = $sql; 
    $rd = $cmd.ExecuteReader(); 
    while ($rd.Read()) 
    { 
        $databases +$rd.GetString(0); 
    } 
    $rd.Close(); 
    $rd.Dispose(); 
} 
 
foreach ($database in $databases) 
{ 
    [string] $timestamp = (Get-Date -format yyyy-MM-dd_HH-mm-ss); 
    [int]    $cnt = 1; 
    [string] $disks   = [String]::Empty; 
    [string] $backup  = "BACKUP DATABASE [$database] TO "; 
    [string] $restore = "USE [master]; `r`n" + ` 
                        "GO`r`n`r`n" + ` 
                        "RESTORE DATABASE [$database] FROM ";     
     
    # Skip in all case the TempDB. 
    if ($database -eq "tempdb") 
    {   continue;   } 
     
    Write-Host ((Get-Date -format yyyy-MM-dd_HH:mm:ss) + ": Start striped backup of $database."); 
    $fileName = removeInvalidChars $database; 
     
    foreach ($folder in $folders) 
    { 
        if (!$folder.EndsWith("\")) 
        {   $folder += "\";   } 
         
        $disks +"`r`nDISK = N'$folder$fileName`_$timestamp`_$cnt.bak',"; 
        $cnt += 1; 
    } 
     
    $backup +$disks.Substring(0, $disks.Length - 1); 
    $backup +"`r`nWITH NOFORMAT, INIT, NAME = N'$database backup $timestamp', SKIP, NOREWIND, NOUNLOAD, STATS = 10"; 
    if ($compression)  
    { $backup +", COMPRESSION;"   } 
    else 
    { $backup +";"   }     
    Set-Content "$scripts$fileName`_Backup`_$timestamp.sql" $backup; 
     
    $restore +$disks.Substring(0, $disks.Length - 1); 
    $restore +"`r`nWITH  FILE = 1, NOUNLOAD, REPLACE, STATS = 10;"; 
    Set-Content "$scripts$fileName`_Restore`_$timestamp.sql"  $restore; 
 
    # Starting the backup     
    $cmd.CommandText = $backup; 
    $nil = $cmd.ExecuteNonQuery(); 
    Write-Host ((Get-Date -format yyyy-MM-dd_HH:mm:ss) + ": Finished striped backup of $database.`n`n"); 
} 
 
if ($withInfoMsg) 
{   Unregister-Event -SourceIdentifier "PoShStripedBackup";   } 
 
$cmd.Dispose(); 
$con.Close(); 
$con.Dispose(); 
 
Write-Host ((Get-Date -format yyyy-MM-dd_HH:mm:ss) + ": Finished");