$a = ConvertFrom-Csv @'
Name,Age,
John,20
Amy,25
Joe,30
'@
$b = ConvertFrom-Csv @'
Name,Address
JohnDoe,123 street
AmyDoe,456 street
JoeSmith,789 drive
'@
Using this Join-Object script/Join-Object Module (see also: In Powershell, what's the best way to join two tables into one?), you might do something like this:
$a |Join $b -Using { $Right.Name -Like "$($Left.Name)*" }
Name            Age Address
----            --- -------
{John, JohnDoe} 20  123 street
{Amy, AmyDoe}   25  456 street
{Joe, JoeSmith} 30  789 drive
To separate the names:
$a |Join $b -Using { $Right.Name -Like "$($Left.Name)*" } -Name A,B
AName BName    Age Address
----- -----    --- -------
John  JohnDoe  20  123 street
Amy   AmyDoe   25  456 street
Joe   JoeSmith 30  789 drive
Note that besides the fact that there is a risk that e.g. a Jon will be matched with a JonathanDoe, the -Using parameter is rather slow.
If the full names are actually in camelCase or PascalCase, it will be faster  to strip off the surname first (which might be done for both sides):
'JohnDoe' -CReplace '(?<=.+)[A-Z]+.*'
John
$a |Join $b -On { $_.Name -CReplace '(?<=.+)[A-Z]+.*' } -Name A,B
AName BName    Age Address
----- -----    --- -------
John  JohnDoe  20  123 street
Amy   AmyDoe   25  456 street
Joe   JoeSmith 30  789 drive